@unbrained/pm-cli 2026.6.13 → 2026.6.17

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 (808) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/README.md +1 -1
  3. package/dist/cli/bootstrap-args.d.ts +29 -0
  4. package/dist/cli/bootstrap-args.js +11 -4
  5. package/dist/cli/bootstrap-args.js.map +1 -1
  6. package/dist/cli/commander-usage.d.ts +12 -0
  7. package/dist/cli/commander-usage.js +18 -7
  8. package/dist/cli/commander-usage.js.map +1 -1
  9. package/dist/cli/commands/activity.d.ts +19 -0
  10. package/dist/cli/commands/activity.js +12 -2
  11. package/dist/cli/commands/activity.js.map +1 -1
  12. package/dist/cli/commands/aggregate.d.ts +58 -0
  13. package/dist/cli/commands/aggregate.js +48 -15
  14. package/dist/cli/commands/aggregate.js.map +1 -1
  15. package/dist/cli/commands/annotation-command.d.ts +6 -1
  16. package/dist/cli/commands/annotation-command.js +72 -2
  17. package/dist/cli/commands/annotation-command.js.map +1 -1
  18. package/dist/cli/commands/append.js +4 -3
  19. package/dist/cli/commands/append.js.map +1 -1
  20. package/dist/cli/commands/close-many.d.ts +20 -0
  21. package/dist/cli/commands/close-many.js +14 -23
  22. package/dist/cli/commands/close-many.js.map +1 -1
  23. package/dist/cli/commands/close.js +37 -4
  24. package/dist/cli/commands/close.js.map +1 -1
  25. package/dist/cli/commands/comments-audit.js +3 -2
  26. package/dist/cli/commands/comments-audit.js.map +1 -1
  27. package/dist/cli/commands/comments.d.ts +2 -0
  28. package/dist/cli/commands/comments.js +49 -23
  29. package/dist/cli/commands/comments.js.map +1 -1
  30. package/dist/cli/commands/completion.js +362 -15
  31. package/dist/cli/commands/completion.js.map +1 -1
  32. package/dist/cli/commands/config.d.ts +51 -1
  33. package/dist/cli/commands/config.js +50 -12
  34. package/dist/cli/commands/config.js.map +1 -1
  35. package/dist/cli/commands/context.d.ts +79 -1
  36. package/dist/cli/commands/context.js +151 -25
  37. package/dist/cli/commands/context.js.map +1 -1
  38. package/dist/cli/commands/contracts.d.ts +80 -1
  39. package/dist/cli/commands/contracts.js +54 -4
  40. package/dist/cli/commands/contracts.js.map +1 -1
  41. package/dist/cli/commands/create.d.ts +51 -0
  42. package/dist/cli/commands/create.js +137 -18
  43. package/dist/cli/commands/create.js.map +1 -1
  44. package/dist/cli/commands/dedupe-audit.d.ts +33 -0
  45. package/dist/cli/commands/dedupe-audit.js +18 -14
  46. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  47. package/dist/cli/commands/deps.js +7 -4
  48. package/dist/cli/commands/deps.js.map +1 -1
  49. package/dist/cli/commands/event-validation-messages.js +3 -3
  50. package/dist/cli/commands/event-validation-messages.js.map +1 -1
  51. package/dist/cli/commands/extension/bundled-catalog.d.ts +7 -0
  52. package/dist/cli/commands/extension/bundled-catalog.js +19 -15
  53. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  54. package/dist/cli/commands/extension/install-sources.d.ts +41 -1
  55. package/dist/cli/commands/extension/install-sources.js +26 -8
  56. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  57. package/dist/cli/commands/extension/shared.d.ts +5 -0
  58. package/dist/cli/commands/extension/shared.js +9 -3
  59. package/dist/cli/commands/extension/shared.js.map +1 -1
  60. package/dist/cli/commands/extension.d.ts +133 -1
  61. package/dist/cli/commands/extension.js +127 -9
  62. package/dist/cli/commands/extension.js.map +1 -1
  63. package/dist/cli/commands/files.d.ts +30 -1
  64. package/dist/cli/commands/files.js +21 -2
  65. package/dist/cli/commands/files.js.map +1 -1
  66. package/dist/cli/commands/focus.d.ts +11 -0
  67. package/dist/cli/commands/focus.js +86 -0
  68. package/dist/cli/commands/focus.js.map +1 -0
  69. package/dist/cli/commands/get.d.ts +9 -2
  70. package/dist/cli/commands/get.js +34 -6
  71. package/dist/cli/commands/get.js.map +1 -1
  72. package/dist/cli/commands/guide.d.ts +5 -0
  73. package/dist/cli/commands/guide.js +6 -3
  74. package/dist/cli/commands/guide.js.map +1 -1
  75. package/dist/cli/commands/health.d.ts +109 -0
  76. package/dist/cli/commands/health.js +87 -35
  77. package/dist/cli/commands/health.js.map +1 -1
  78. package/dist/cli/commands/history-compact.js +27 -36
  79. package/dist/cli/commands/history-compact.js.map +1 -1
  80. package/dist/cli/commands/history-redact.d.ts +46 -0
  81. package/dist/cli/commands/history-redact.js +99 -67
  82. package/dist/cli/commands/history-redact.js.map +1 -1
  83. package/dist/cli/commands/history-repair.js +34 -37
  84. package/dist/cli/commands/history-repair.js.map +1 -1
  85. package/dist/cli/commands/history.js +6 -2
  86. package/dist/cli/commands/history.js.map +1 -1
  87. package/dist/cli/commands/index.d.ts +4 -1
  88. package/dist/cli/commands/index.js +6 -3
  89. package/dist/cli/commands/index.js.map +1 -1
  90. package/dist/cli/commands/init-agent-guidance.d.ts +54 -0
  91. package/dist/cli/commands/init-agent-guidance.js +31 -4
  92. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  93. package/dist/cli/commands/init.d.ts +38 -2
  94. package/dist/cli/commands/init.js +50 -64
  95. package/dist/cli/commands/init.js.map +1 -1
  96. package/dist/cli/commands/learnings.js +4 -3
  97. package/dist/cli/commands/learnings.js.map +1 -1
  98. package/dist/cli/commands/lifecycle-transitions.d.ts +23 -0
  99. package/dist/cli/commands/lifecycle-transitions.js +41 -0
  100. package/dist/cli/commands/lifecycle-transitions.js.map +1 -0
  101. package/dist/cli/commands/linked-artifacts.d.ts +5 -0
  102. package/dist/cli/commands/linked-artifacts.js +18 -4
  103. package/dist/cli/commands/linked-artifacts.js.map +1 -1
  104. package/dist/cli/commands/linked-test-parsers.d.ts +5 -0
  105. package/dist/cli/commands/linked-test-parsers.js +5 -2
  106. package/dist/cli/commands/linked-test-parsers.js.map +1 -1
  107. package/dist/cli/commands/list-filter-shared.d.ts +8 -0
  108. package/dist/cli/commands/list-filter-shared.js +70 -0
  109. package/dist/cli/commands/list-filter-shared.js.map +1 -0
  110. package/dist/cli/commands/list.d.ts +116 -0
  111. package/dist/cli/commands/list.js +194 -6
  112. package/dist/cli/commands/list.js.map +1 -1
  113. package/dist/cli/commands/normalize.js +16 -2
  114. package/dist/cli/commands/normalize.js.map +1 -1
  115. package/dist/cli/commands/notes.js +4 -3
  116. package/dist/cli/commands/notes.js.map +1 -1
  117. package/dist/cli/commands/plan.js +3 -2
  118. package/dist/cli/commands/plan.js.map +1 -1
  119. package/dist/cli/commands/recurrence-parsers.d.ts +9 -0
  120. package/dist/cli/commands/recurrence-parsers.js +19 -2
  121. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  122. package/dist/cli/commands/reindex.d.ts +83 -0
  123. package/dist/cli/commands/reindex.js +45 -10
  124. package/dist/cli/commands/reindex.js.map +1 -1
  125. package/dist/cli/commands/repeatable-metadata-parsers.js +28 -4
  126. package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -1
  127. package/dist/cli/commands/restore.d.ts +40 -1
  128. package/dist/cli/commands/restore.js +27 -2
  129. package/dist/cli/commands/restore.js.map +1 -1
  130. package/dist/cli/commands/scheduling-shortcuts.d.ts +43 -0
  131. package/dist/cli/commands/scheduling-shortcuts.js +87 -0
  132. package/dist/cli/commands/scheduling-shortcuts.js.map +1 -0
  133. package/dist/cli/commands/schema.d.ts +152 -2
  134. package/dist/cli/commands/schema.js +510 -4
  135. package/dist/cli/commands/schema.js.map +1 -1
  136. package/dist/cli/commands/search.d.ts +289 -1
  137. package/dist/cli/commands/search.js +367 -60
  138. package/dist/cli/commands/search.js.map +1 -1
  139. package/dist/cli/commands/stats.d.ts +38 -0
  140. package/dist/cli/commands/stats.js +38 -10
  141. package/dist/cli/commands/stats.js.map +1 -1
  142. package/dist/cli/commands/telemetry.js +5 -3
  143. package/dist/cli/commands/telemetry.js.map +1 -1
  144. package/dist/cli/commands/templates.d.ts +18 -0
  145. package/dist/cli/commands/templates.js +9 -2
  146. package/dist/cli/commands/templates.js.map +1 -1
  147. package/dist/cli/commands/test-all.d.ts +5 -0
  148. package/dist/cli/commands/test-all.js +9 -3
  149. package/dist/cli/commands/test-all.js.map +1 -1
  150. package/dist/cli/commands/test.d.ts +70 -1
  151. package/dist/cli/commands/test.js +84 -3
  152. package/dist/cli/commands/test.js.map +1 -1
  153. package/dist/cli/commands/update-many.d.ts +34 -1
  154. package/dist/cli/commands/update-many.js +60 -31
  155. package/dist/cli/commands/update-many.js.map +1 -1
  156. package/dist/cli/commands/update.d.ts +71 -0
  157. package/dist/cli/commands/update.js +91 -11
  158. package/dist/cli/commands/update.js.map +1 -1
  159. package/dist/cli/commands/upgrade.d.ts +28 -1
  160. package/dist/cli/commands/upgrade.js +17 -4
  161. package/dist/cli/commands/upgrade.js.map +1 -1
  162. package/dist/cli/commands/validate.d.ts +114 -0
  163. package/dist/cli/commands/validate.js +153 -8
  164. package/dist/cli/commands/validate.js.map +1 -1
  165. package/dist/cli/error-guidance.d.ts +30 -0
  166. package/dist/cli/error-guidance.js +41 -6
  167. package/dist/cli/error-guidance.js.map +1 -1
  168. package/dist/cli/extension-command-options.js +9 -7
  169. package/dist/cli/extension-command-options.js.map +1 -1
  170. package/dist/cli/help-content.d.ts +8 -0
  171. package/dist/cli/help-content.js +54 -6
  172. package/dist/cli/help-content.js.map +1 -1
  173. package/dist/cli/help-json-payload.d.ts +19 -1
  174. package/dist/cli/help-json-payload.js +16 -7
  175. package/dist/cli/help-json-payload.js.map +1 -1
  176. package/dist/cli/main.d.ts +242 -0
  177. package/dist/cli/main.js +241 -45
  178. package/dist/cli/main.js.map +1 -1
  179. package/dist/cli/register-list-query.js +62 -5
  180. package/dist/cli/register-list-query.js.map +1 -1
  181. package/dist/cli/register-mutation.d.ts +16 -0
  182. package/dist/cli/register-mutation.js +376 -100
  183. package/dist/cli/register-mutation.js.map +1 -1
  184. package/dist/cli/register-operations.d.ts +8 -0
  185. package/dist/cli/register-operations.js +134 -11
  186. package/dist/cli/register-operations.js.map +1 -1
  187. package/dist/cli/register-setup.js +9 -6
  188. package/dist/cli/register-setup.js.map +1 -1
  189. package/dist/cli/registration-helpers.d.ts +4 -0
  190. package/dist/cli/registration-helpers.js +124 -38
  191. package/dist/cli/registration-helpers.js.map +1 -1
  192. package/dist/cli-bundle/chunks/activity-PZYSZA26.js +18 -0
  193. package/dist/cli-bundle/chunks/{activity-PPO7QWJF.js → activity-SFM4THAU.js} +13 -11
  194. package/dist/cli-bundle/chunks/{aggregate-IRHJWEKG.js → aggregate-Y5ADDKBM.js} +55 -26
  195. package/dist/cli-bundle/chunks/aggregate-Y5ADDKBM.js.map +1 -0
  196. package/dist/cli-bundle/chunks/{aggregate-XEBW22UQ.js → aggregate-YTAUQLRW.js} +54 -25
  197. package/dist/cli-bundle/chunks/aggregate-YTAUQLRW.js.map +7 -0
  198. package/dist/cli-bundle/chunks/{append-NL67JNJU.js → append-4M7OVV7M.js} +11 -11
  199. package/dist/cli-bundle/chunks/append-4M7OVV7M.js.map +1 -0
  200. package/dist/cli-bundle/chunks/{append-N2AWXKZC.js → append-HSPK4L4V.js} +10 -10
  201. package/dist/cli-bundle/chunks/{append-N2AWXKZC.js.map → append-HSPK4L4V.js.map} +2 -2
  202. package/dist/cli-bundle/chunks/{chunk-IIOIBAQW.js → chunk-26BM6YLO.js} +3 -3
  203. package/dist/cli-bundle/chunks/{chunk-CEGUH2E5.js → chunk-2C6FU3D3.js} +5 -5
  204. package/dist/cli-bundle/chunks/{chunk-CEGUH2E5.js.map → chunk-2C6FU3D3.js.map} +1 -1
  205. package/dist/cli-bundle/chunks/{chunk-SQDKAEKG.js → chunk-2OPYLXDO.js} +117 -37
  206. package/dist/cli-bundle/chunks/chunk-2OPYLXDO.js.map +7 -0
  207. package/dist/cli-bundle/chunks/{chunk-4ZKKZMLH.js → chunk-2S46FKLB.js} +104 -30
  208. package/dist/cli-bundle/chunks/chunk-2S46FKLB.js.map +1 -0
  209. package/dist/cli-bundle/chunks/{chunk-LSSTKL3Y.js → chunk-2TMKMTEI.js} +3 -3
  210. package/dist/cli-bundle/chunks/{chunk-QU3OPNVV.js → chunk-2VH7DFSJ.js} +2 -2
  211. package/dist/cli-bundle/chunks/{chunk-RHYBR6G7.js → chunk-3ENF4NO4.js} +74 -14
  212. package/dist/cli-bundle/chunks/chunk-3ENF4NO4.js.map +1 -0
  213. package/dist/cli-bundle/chunks/chunk-3GR2HTYY.js +404 -0
  214. package/dist/cli-bundle/chunks/chunk-3GR2HTYY.js.map +7 -0
  215. package/dist/cli-bundle/chunks/{chunk-AAUYXSFF.js → chunk-3R3FYCBV.js} +223 -50
  216. package/dist/cli-bundle/chunks/chunk-3R3FYCBV.js.map +7 -0
  217. package/dist/cli-bundle/chunks/{chunk-5HSAHRYA.js → chunk-3UKJX3RP.js} +82 -21
  218. package/dist/cli-bundle/chunks/chunk-3UKJX3RP.js.map +7 -0
  219. package/dist/cli-bundle/chunks/chunk-4RTLBTYS.js +83 -0
  220. package/dist/cli-bundle/chunks/chunk-4RTLBTYS.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{chunk-UCVJP4JL.js → chunk-5FDYWOJT.js} +52 -8
  222. package/dist/cli-bundle/chunks/chunk-5FDYWOJT.js.map +7 -0
  223. package/dist/cli-bundle/chunks/{chunk-LGOXXQUW.js → chunk-5XGWFUW2.js} +2 -2
  224. package/dist/cli-bundle/chunks/{chunk-LYNQ3NGI.js → chunk-6BD77FGL.js} +309 -20
  225. package/dist/cli-bundle/chunks/chunk-6BD77FGL.js.map +1 -0
  226. package/dist/cli-bundle/chunks/chunk-6EFCFPNE.js +35 -0
  227. package/dist/cli-bundle/chunks/chunk-6EFCFPNE.js.map +7 -0
  228. package/dist/cli-bundle/chunks/{chunk-36BCSMKP.js → chunk-6HF6CIY2.js} +26 -11
  229. package/dist/cli-bundle/chunks/chunk-6HF6CIY2.js.map +7 -0
  230. package/dist/cli-bundle/chunks/{chunk-M3SI2REU.js → chunk-6PBPD4MN.js} +322 -19
  231. package/dist/cli-bundle/chunks/chunk-6PBPD4MN.js.map +7 -0
  232. package/dist/cli-bundle/chunks/{chunk-TSXWFN3L.js → chunk-6VFUEGOA.js} +53 -9
  233. package/dist/cli-bundle/chunks/chunk-6VFUEGOA.js.map +1 -0
  234. package/dist/cli-bundle/chunks/{chunk-2J2AH4V5.js → chunk-AAOXSPAE.js} +56 -72
  235. package/dist/cli-bundle/chunks/chunk-AAOXSPAE.js.map +1 -0
  236. package/dist/cli-bundle/chunks/{chunk-Z647PYLD.js → chunk-AJCQ5GT6.js} +4 -4
  237. package/dist/cli-bundle/chunks/chunk-ALTGYHN3.js +61 -0
  238. package/dist/cli-bundle/chunks/chunk-ALTGYHN3.js.map +7 -0
  239. package/dist/cli-bundle/chunks/{chunk-KHGTYCJ6.js → chunk-AOJQL33L.js} +83 -22
  240. package/dist/cli-bundle/chunks/chunk-AOJQL33L.js.map +1 -0
  241. package/dist/cli-bundle/chunks/{chunk-5LMF75Q7.js → chunk-AXLDUGXA.js} +7 -4
  242. package/dist/cli-bundle/chunks/{chunk-5LMF75Q7.js.map → chunk-AXLDUGXA.js.map} +2 -2
  243. package/dist/cli-bundle/chunks/{chunk-DWG4FHPY.js → chunk-BITCVGHT.js} +2 -2
  244. package/dist/cli-bundle/chunks/{chunk-JE5IZXDS.js → chunk-CGQTFWYI.js} +4 -4
  245. package/dist/cli-bundle/chunks/{chunk-LFW5NQUP.js → chunk-CHM2VFVL.js} +407 -290
  246. package/dist/cli-bundle/chunks/chunk-CHM2VFVL.js.map +7 -0
  247. package/dist/cli-bundle/chunks/{chunk-VYZNX4C5.js → chunk-COVLE33A.js} +3 -3
  248. package/dist/cli-bundle/chunks/{chunk-SGMGMCIF.js → chunk-DDNBWH4W.js} +157 -25
  249. package/dist/cli-bundle/chunks/chunk-DDNBWH4W.js.map +1 -0
  250. package/dist/cli-bundle/chunks/{chunk-6ZFTM65G.js → chunk-F5MSD5HE.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-6TBR5AZ2.js → chunk-FAXB6F6R.js} +76 -8
  252. package/dist/cli-bundle/chunks/chunk-FAXB6F6R.js.map +7 -0
  253. package/dist/cli-bundle/chunks/{chunk-L6YQONLM.js → chunk-FPDK5BZQ.js} +18 -19
  254. package/dist/cli-bundle/chunks/chunk-FPDK5BZQ.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{chunk-AGG32LKL.js → chunk-FPY2TOFI.js} +480 -24
  256. package/dist/cli-bundle/chunks/chunk-FPY2TOFI.js.map +1 -0
  257. package/dist/cli-bundle/chunks/{chunk-JWXTOYBI.js → chunk-G2MOUCTU.js} +121 -44
  258. package/dist/cli-bundle/chunks/chunk-G2MOUCTU.js.map +7 -0
  259. package/dist/cli-bundle/chunks/{chunk-3VULHQNS.js → chunk-G57RHEGP.js} +36 -18
  260. package/dist/cli-bundle/chunks/chunk-G57RHEGP.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{chunk-QQG4HEX7.js → chunk-IROHIK2T.js} +37 -63
  262. package/dist/cli-bundle/chunks/chunk-IROHIK2T.js.map +1 -0
  263. package/dist/cli-bundle/chunks/{chunk-GOO4UXBI.js → chunk-JZHL4E3Q.js} +4 -4
  264. package/dist/cli-bundle/chunks/{chunk-XXLMJDUB.js → chunk-KA22USXD.js} +21 -22
  265. package/dist/cli-bundle/chunks/chunk-KA22USXD.js.map +7 -0
  266. package/dist/cli-bundle/chunks/{chunk-WLH7X4RN.js → chunk-KBC4O7SY.js} +56 -72
  267. package/dist/cli-bundle/chunks/chunk-KBC4O7SY.js.map +7 -0
  268. package/dist/cli-bundle/chunks/{chunk-NN6RKGFW.js → chunk-KCAGIH6K.js} +3 -3
  269. package/dist/cli-bundle/chunks/{chunk-BVL5KGVA.js → chunk-KO3VM5GS.js} +27 -12
  270. package/dist/cli-bundle/chunks/chunk-KO3VM5GS.js.map +1 -0
  271. package/dist/cli-bundle/chunks/{chunk-IXVSSHGV.js → chunk-LNH5Q32E.js} +13 -8
  272. package/dist/cli-bundle/chunks/chunk-LNH5Q32E.js.map +7 -0
  273. package/dist/cli-bundle/chunks/{chunk-3FMQMHAG.js → chunk-LORM3M2I.js} +4 -4
  274. package/dist/cli-bundle/chunks/{chunk-3FMQMHAG.js.map → chunk-LORM3M2I.js.map} +1 -1
  275. package/dist/cli-bundle/chunks/{chunk-PNYAAB4S.js → chunk-LWGMDLQ6.js} +8 -3
  276. package/dist/cli-bundle/chunks/chunk-LWGMDLQ6.js.map +1 -0
  277. package/dist/cli-bundle/chunks/{chunk-GFBEXDCQ.js → chunk-M4AVU7VC.js} +19 -8
  278. package/dist/cli-bundle/chunks/{chunk-GFBEXDCQ.js.map → chunk-M4AVU7VC.js.map} +2 -2
  279. package/dist/cli-bundle/chunks/{chunk-3CQPVBK3.js → chunk-MIBX6ZRN.js} +3 -3
  280. package/dist/cli-bundle/chunks/{chunk-AUDDXKNX.js → chunk-MMF2E3FM.js} +77 -9
  281. package/dist/cli-bundle/chunks/chunk-MMF2E3FM.js.map +1 -0
  282. package/dist/cli-bundle/chunks/{chunk-RFR2YQGO.js → chunk-MORZOR7W.js} +21 -8
  283. package/dist/cli-bundle/chunks/chunk-MORZOR7W.js.map +1 -0
  284. package/dist/cli-bundle/chunks/{chunk-4TPFXE2R.js → chunk-MUTUZ2HD.js} +118 -74
  285. package/dist/cli-bundle/chunks/chunk-MUTUZ2HD.js.map +1 -0
  286. package/dist/cli-bundle/chunks/{chunk-HZOX5BYD.js → chunk-OGXEBTX3.js} +35 -17
  287. package/dist/cli-bundle/chunks/chunk-OGXEBTX3.js.map +7 -0
  288. package/dist/cli-bundle/chunks/{chunk-LOAR5TKX.js → chunk-OOIH6J5T.js} +4 -4
  289. package/dist/cli-bundle/chunks/{chunk-LOAR5TKX.js.map → chunk-OOIH6J5T.js.map} +1 -1
  290. package/dist/cli-bundle/chunks/{chunk-VNC2HBL4.js → chunk-OSBJPPX3.js} +20 -9
  291. package/dist/cli-bundle/chunks/chunk-OSBJPPX3.js.map +1 -0
  292. package/dist/cli-bundle/chunks/{chunk-2ANTZBYF.js → chunk-PJS3WDO2.js} +122 -45
  293. package/dist/cli-bundle/chunks/chunk-PJS3WDO2.js.map +1 -0
  294. package/dist/cli-bundle/chunks/{chunk-7SM7VA5I.js → chunk-QGPE2H6Z.js} +19 -8
  295. package/dist/cli-bundle/chunks/chunk-QGPE2H6Z.js.map +7 -0
  296. package/dist/cli-bundle/chunks/chunk-QVTFFLR2.js +58 -0
  297. package/dist/cli-bundle/chunks/chunk-QVTFFLR2.js.map +1 -0
  298. package/dist/cli-bundle/chunks/{chunk-JCTZV7TO.js → chunk-QW2F6ARZ.js} +8 -5
  299. package/dist/cli-bundle/chunks/{chunk-JCTZV7TO.js.map → chunk-QW2F6ARZ.js.map} +1 -1
  300. package/dist/cli-bundle/chunks/{chunk-TOX7YQ7X.js → chunk-QXC3LWB7.js} +223 -50
  301. package/dist/cli-bundle/chunks/chunk-QXC3LWB7.js.map +1 -0
  302. package/dist/cli-bundle/chunks/{chunk-W6KNFAMZ.js → chunk-QXMXRPX5.js} +9 -8
  303. package/dist/cli-bundle/chunks/chunk-QXMXRPX5.js.map +7 -0
  304. package/dist/cli-bundle/chunks/{chunk-O3YCJOVX.js → chunk-R4AKUPKI.js} +3 -3
  305. package/dist/cli-bundle/chunks/{chunk-O3YCJOVX.js.map → chunk-R4AKUPKI.js.map} +1 -1
  306. package/dist/cli-bundle/chunks/chunk-RASR23HV.js +394 -0
  307. package/dist/cli-bundle/chunks/chunk-RASR23HV.js.map +1 -0
  308. package/dist/cli-bundle/chunks/{chunk-JW7D6437.js → chunk-SCDCNGCV.js} +20 -9
  309. package/dist/cli-bundle/chunks/chunk-SCDCNGCV.js.map +1 -0
  310. package/dist/cli-bundle/chunks/{chunk-GRZGHGRG.js → chunk-SCS5PVAA.js} +10 -9
  311. package/dist/cli-bundle/chunks/{chunk-GRZGHGRG.js.map → chunk-SCS5PVAA.js.map} +2 -2
  312. package/dist/cli-bundle/chunks/{chunk-S2CDTRJ6.js → chunk-SJCMTOEU.js} +381 -271
  313. package/dist/cli-bundle/chunks/chunk-SJCMTOEU.js.map +1 -0
  314. package/dist/cli-bundle/chunks/{chunk-XWDZVCBJ.js → chunk-SO2ES46D.js} +11 -10
  315. package/dist/cli-bundle/chunks/{chunk-XWDZVCBJ.js.map → chunk-SO2ES46D.js.map} +1 -1
  316. package/dist/cli-bundle/chunks/{chunk-MACCNKSZ.js → chunk-TBV33CB4.js} +36 -62
  317. package/dist/cli-bundle/chunks/chunk-TBV33CB4.js.map +7 -0
  318. package/dist/cli-bundle/chunks/chunk-TEFEXQWI.js +86 -0
  319. package/dist/cli-bundle/chunks/chunk-TEFEXQWI.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{chunk-HLEGAQXT.js → chunk-TWBDDVIF.js} +20 -7
  321. package/dist/cli-bundle/chunks/chunk-TWBDDVIF.js.map +7 -0
  322. package/dist/cli-bundle/chunks/{chunk-4JHJ7YG2.js → chunk-UGUJ2UOR.js} +118 -74
  323. package/dist/cli-bundle/chunks/chunk-UGUJ2UOR.js.map +7 -0
  324. package/dist/cli-bundle/chunks/{chunk-XOYHMHFF.js → chunk-UN6P3IJ4.js} +3 -3
  325. package/dist/cli-bundle/chunks/{chunk-32XSW44C.js → chunk-V2GYOMEX.js} +10 -9
  326. package/dist/cli-bundle/chunks/chunk-V2GYOMEX.js.map +1 -0
  327. package/dist/cli-bundle/chunks/{chunk-HWHONML5.js → chunk-VF3KQGNY.js} +4 -4
  328. package/dist/cli-bundle/chunks/{chunk-SOHXUA2Q.js → chunk-VHG6LUKR.js} +116 -36
  329. package/dist/cli-bundle/chunks/chunk-VHG6LUKR.js.map +1 -0
  330. package/dist/cli-bundle/chunks/{chunk-7CRFV6JR.js → chunk-VXHMQDXA.js} +483 -27
  331. package/dist/cli-bundle/chunks/chunk-VXHMQDXA.js.map +7 -0
  332. package/dist/cli-bundle/chunks/{chunk-IZHCCG4S.js → chunk-VXRFAE7W.js} +14 -9
  333. package/dist/cli-bundle/chunks/chunk-VXRFAE7W.js.map +1 -0
  334. package/dist/cli-bundle/chunks/{chunk-R4VWYWRN.js → chunk-W3HFLORZ.js} +7 -2
  335. package/dist/cli-bundle/chunks/chunk-W3HFLORZ.js.map +7 -0
  336. package/dist/cli-bundle/chunks/{chunk-4FHLNNW7.js → chunk-WQRL4COW.js} +74 -14
  337. package/dist/cli-bundle/chunks/chunk-WQRL4COW.js.map +7 -0
  338. package/dist/cli-bundle/chunks/chunk-X3W5ESZQ.js +32 -0
  339. package/dist/cli-bundle/chunks/chunk-X3W5ESZQ.js.map +1 -0
  340. package/dist/cli-bundle/chunks/{chunk-MGAQ6KZG.js → chunk-XESAPVZ4.js} +166 -27
  341. package/dist/cli-bundle/chunks/chunk-XESAPVZ4.js.map +7 -0
  342. package/dist/cli-bundle/chunks/{chunk-PEH7SZD2.js → chunk-YLAW3FZN.js} +105 -31
  343. package/dist/cli-bundle/chunks/chunk-YLAW3FZN.js.map +7 -0
  344. package/dist/cli-bundle/chunks/{claim-HE6KEGJW.js → claim-WGAWJCPY.js} +10 -10
  345. package/dist/cli-bundle/chunks/{claim-QJOQBH7J.js → claim-ZI6P4LMU.js} +10 -10
  346. package/dist/cli-bundle/chunks/close-I7PRQ5G7.js +13 -0
  347. package/dist/cli-bundle/chunks/{close-SPUFW5QR.js → close-JMVVSIQE.js} +8 -8
  348. package/dist/cli-bundle/chunks/{close-many-GKAJX54X.js → close-many-IKPJXVOZ.js} +32 -20
  349. package/dist/cli-bundle/chunks/close-many-IKPJXVOZ.js.map +1 -0
  350. package/dist/cli-bundle/chunks/{close-many-GL6NRUU5.js → close-many-TXABDCSJ.js} +31 -19
  351. package/dist/cli-bundle/chunks/close-many-TXABDCSJ.js.map +7 -0
  352. package/dist/cli-bundle/chunks/{comments-5FPT6L7N.js → comments-RLWR2S7W.js} +55 -31
  353. package/dist/cli-bundle/chunks/comments-RLWR2S7W.js.map +1 -0
  354. package/dist/cli-bundle/chunks/{comments-TOLOYWNI.js → comments-YAMXKHUX.js} +54 -30
  355. package/dist/cli-bundle/chunks/comments-YAMXKHUX.js.map +7 -0
  356. package/dist/cli-bundle/chunks/{config-7N6D7YJE.js → config-7ICYC2WU.js} +83 -19
  357. package/dist/cli-bundle/chunks/config-7ICYC2WU.js.map +7 -0
  358. package/dist/cli-bundle/chunks/{config-4MN45TIH.js → config-NGWN3EXC.js} +83 -19
  359. package/dist/cli-bundle/chunks/config-NGWN3EXC.js.map +1 -0
  360. package/dist/cli-bundle/chunks/{context-AQSLE7DZ.js → context-K6QAHN5H.js} +128 -39
  361. package/dist/cli-bundle/chunks/context-K6QAHN5H.js.map +1 -0
  362. package/dist/cli-bundle/chunks/{context-U3PUJMVN.js → context-VGXOOAH2.js} +127 -38
  363. package/dist/cli-bundle/chunks/context-VGXOOAH2.js.map +7 -0
  364. package/dist/cli-bundle/chunks/{contracts-ITSJXO3O.js → contracts-KJGY2AQA.js} +99 -15
  365. package/dist/cli-bundle/chunks/contracts-KJGY2AQA.js.map +1 -0
  366. package/dist/cli-bundle/chunks/{contracts-H7KCQXLY.js → contracts-KMA6OJY7.js} +99 -15
  367. package/dist/cli-bundle/chunks/contracts-KMA6OJY7.js.map +7 -0
  368. package/dist/cli-bundle/chunks/{copy-EB3MUCSW.js → copy-Q2PPU4AY.js} +7 -7
  369. package/dist/cli-bundle/chunks/{copy-C4W522JM.js → copy-SC6UF3PI.js} +7 -7
  370. package/dist/cli-bundle/chunks/{create-4EQNELMY.js → create-76FE7JVF.js} +16 -13
  371. package/dist/cli-bundle/chunks/create-RTRFW6RE.js +30 -0
  372. package/dist/cli-bundle/chunks/{delete-X5QLXIQX.js → delete-T6DJSUJI.js} +7 -7
  373. package/dist/cli-bundle/chunks/{delete-ZLGUYIXU.js → delete-XFUX533E.js} +7 -7
  374. package/dist/cli-bundle/chunks/{deps-GPB3LGWN.js → deps-5GWMMS6D.js} +9 -10
  375. package/dist/cli-bundle/chunks/{deps-GPB3LGWN.js.map → deps-5GWMMS6D.js.map} +2 -2
  376. package/dist/cli-bundle/chunks/{deps-HV2C2L46.js → deps-MCCU633S.js} +10 -11
  377. package/dist/cli-bundle/chunks/deps-MCCU633S.js.map +1 -0
  378. package/dist/cli-bundle/chunks/{docs-SRTLCQOL.js → docs-HE3HCQ4S.js} +9 -9
  379. package/dist/cli-bundle/chunks/{docs-RJQPLROO.js → docs-SXMOABHR.js} +9 -9
  380. package/dist/cli-bundle/chunks/{extension-WKPVPNCC.js → extension-E23K4QRR.js} +7 -5
  381. package/dist/cli-bundle/chunks/{extension-MM3TVWOO.js → extension-PMD3XMLN.js} +7 -5
  382. package/dist/cli-bundle/chunks/{files-OIFN3DQX.js → files-2RSWGPEU.js} +25 -11
  383. package/dist/cli-bundle/chunks/files-2RSWGPEU.js.map +1 -0
  384. package/dist/cli-bundle/chunks/{files-LIFDKNCN.js → files-ZWFJFWBK.js} +24 -10
  385. package/dist/cli-bundle/chunks/files-ZWFJFWBK.js.map +7 -0
  386. package/dist/cli-bundle/chunks/focus-KTTB3P3F.js +106 -0
  387. package/dist/cli-bundle/chunks/focus-KTTB3P3F.js.map +1 -0
  388. package/dist/cli-bundle/chunks/focus-ZMDP4FEL.js +109 -0
  389. package/dist/cli-bundle/chunks/focus-ZMDP4FEL.js.map +7 -0
  390. package/dist/cli-bundle/chunks/{gc-NRFHLVFT.js → gc-BXIAKLAH.js} +3 -3
  391. package/dist/cli-bundle/chunks/{gc-DL6AVOX5.js → gc-C7K6JNUO.js} +3 -3
  392. package/dist/cli-bundle/chunks/{get-SAB7CRBG.js → get-AZQLC4NO.js} +43 -16
  393. package/dist/cli-bundle/chunks/get-AZQLC4NO.js.map +1 -0
  394. package/dist/cli-bundle/chunks/{get-K7UULTQF.js → get-I65HTAWO.js} +42 -15
  395. package/dist/cli-bundle/chunks/get-I65HTAWO.js.map +7 -0
  396. package/dist/cli-bundle/chunks/{health-NUVZYIEV.js → health-3MFFPQVZ.js} +75 -49
  397. package/dist/cli-bundle/chunks/health-3MFFPQVZ.js.map +1 -0
  398. package/dist/cli-bundle/chunks/{health-VJWH3ZFK.js → health-MYZEOCLI.js} +74 -48
  399. package/dist/cli-bundle/chunks/health-MYZEOCLI.js.map +7 -0
  400. package/dist/cli-bundle/chunks/{history-GYFD2DJW.js → history-73Z6OBFZ.js} +10 -10
  401. package/dist/cli-bundle/chunks/history-BIPHVUMF.js +20 -0
  402. package/dist/cli-bundle/chunks/{history-compact-WQZQ6KXM.js → history-compact-24VQ63A3.js} +37 -46
  403. package/dist/cli-bundle/chunks/history-compact-24VQ63A3.js.map +7 -0
  404. package/dist/cli-bundle/chunks/{history-compact-SLL6ESXH.js → history-compact-UIAR2OI4.js} +38 -47
  405. package/dist/cli-bundle/chunks/history-compact-UIAR2OI4.js.map +1 -0
  406. package/dist/cli-bundle/chunks/{history-redact-SDTDR6WM.js → history-redact-7YCXEWJD.js} +13 -11
  407. package/dist/cli-bundle/chunks/history-redact-WZZ6GZ2Z.js +21 -0
  408. package/dist/cli-bundle/chunks/{history-repair-BJCGM6Q3.js → history-repair-4NOFFG2W.js} +44 -49
  409. package/dist/cli-bundle/chunks/history-repair-4NOFFG2W.js.map +1 -0
  410. package/dist/cli-bundle/chunks/{history-repair-UCYS55ZX.js → history-repair-GQN2X4TR.js} +43 -48
  411. package/dist/cli-bundle/chunks/history-repair-GQN2X4TR.js.map +7 -0
  412. package/dist/cli-bundle/chunks/init-K34V4PZR.js +20 -0
  413. package/dist/cli-bundle/chunks/{init-MXV57LKL.js → init-TDEDNVMM.js} +12 -9
  414. package/dist/cli-bundle/chunks/{learnings-QKJOKEAO.js → learnings-TV2CTGJ3.js} +13 -12
  415. package/dist/cli-bundle/chunks/learnings-TV2CTGJ3.js.map +7 -0
  416. package/dist/cli-bundle/chunks/{learnings-L6KTZGOT.js → learnings-U67FTXPB.js} +14 -13
  417. package/dist/cli-bundle/chunks/learnings-U67FTXPB.js.map +1 -0
  418. package/dist/cli-bundle/chunks/list-MSHYOCFU.js +33 -0
  419. package/dist/cli-bundle/chunks/list-VV57WGUD.js +29 -0
  420. package/dist/cli-bundle/chunks/{notes-HMCB7TK6.js → notes-EUANWWKD.js} +13 -12
  421. package/dist/cli-bundle/chunks/notes-EUANWWKD.js.map +7 -0
  422. package/dist/cli-bundle/chunks/{notes-3NLK7WTZ.js → notes-GYVNDAL4.js} +14 -13
  423. package/dist/cli-bundle/chunks/notes-GYVNDAL4.js.map +1 -0
  424. package/dist/cli-bundle/chunks/{plan-NANUWH4T.js → plan-4LF4AV63.js} +15 -14
  425. package/dist/cli-bundle/chunks/plan-4LF4AV63.js.map +7 -0
  426. package/dist/cli-bundle/chunks/{plan-DWBYI5C6.js → plan-W27O6DBS.js} +16 -15
  427. package/dist/cli-bundle/chunks/plan-W27O6DBS.js.map +1 -0
  428. package/dist/cli-bundle/chunks/{register-list-query-SMMMLSWW.js → register-list-query-BXLEHJ7L.js} +32 -23
  429. package/dist/cli-bundle/chunks/register-list-query-BXLEHJ7L.js.map +1 -0
  430. package/dist/cli-bundle/chunks/{register-list-query-PWQ5F2VI.js → register-list-query-C2MS3BVQ.js} +31 -22
  431. package/dist/cli-bundle/chunks/register-list-query-C2MS3BVQ.js.map +7 -0
  432. package/dist/cli-bundle/chunks/{register-mutation-QKFPTIZG.js → register-mutation-6UCOEQ6L.js} +361 -106
  433. package/dist/cli-bundle/chunks/register-mutation-6UCOEQ6L.js.map +7 -0
  434. package/dist/cli-bundle/chunks/{register-mutation-ZYJQ4DVP.js → register-mutation-HE73PREP.js} +355 -107
  435. package/dist/cli-bundle/chunks/register-mutation-HE73PREP.js.map +1 -0
  436. package/dist/cli-bundle/chunks/{register-operations-2FMZ6WEF.js → register-operations-L6C32FDA.js} +111 -39
  437. package/dist/cli-bundle/chunks/register-operations-L6C32FDA.js.map +7 -0
  438. package/dist/cli-bundle/chunks/{register-operations-BAFQURZG.js → register-operations-QQEHEX4P.js} +112 -40
  439. package/dist/cli-bundle/chunks/register-operations-QQEHEX4P.js.map +1 -0
  440. package/dist/cli-bundle/chunks/{register-setup-QN2XV7UL.js → register-setup-A7N4PNT3.js} +18 -21
  441. package/dist/cli-bundle/chunks/register-setup-A7N4PNT3.js.map +1 -0
  442. package/dist/cli-bundle/chunks/{register-setup-DQEIKBIP.js → register-setup-WHG3NBP6.js} +17 -20
  443. package/dist/cli-bundle/chunks/register-setup-WHG3NBP6.js.map +7 -0
  444. package/dist/cli-bundle/chunks/{restore-FJQWXMPY.js → restore-TSWSULYY.js} +13 -11
  445. package/dist/cli-bundle/chunks/restore-XQXICL3V.js +19 -0
  446. package/dist/cli-bundle/chunks/scheduling-shortcuts-NC46K6BD.js +91 -0
  447. package/dist/cli-bundle/chunks/scheduling-shortcuts-NC46K6BD.js.map +7 -0
  448. package/dist/cli-bundle/chunks/scheduling-shortcuts-UGDPQALY.js +88 -0
  449. package/dist/cli-bundle/chunks/scheduling-shortcuts-UGDPQALY.js.map +1 -0
  450. package/dist/cli-bundle/chunks/{schema-ZZ7ZDM2X.js → schema-7U7JUYGK.js} +797 -10
  451. package/dist/cli-bundle/chunks/schema-7U7JUYGK.js.map +1 -0
  452. package/dist/cli-bundle/chunks/{schema-RNVJ55V2.js → schema-TSBYSEMW.js} +810 -9
  453. package/dist/cli-bundle/chunks/schema-TSBYSEMW.js.map +7 -0
  454. package/dist/cli-bundle/chunks/{search-BJ457C2A.js → search-OXLSQKHP.js} +328 -71
  455. package/dist/cli-bundle/chunks/search-OXLSQKHP.js.map +7 -0
  456. package/dist/cli-bundle/chunks/{search-FQDZXX7P.js → search-T3TOFLOQ.js} +328 -71
  457. package/dist/cli-bundle/chunks/search-T3TOFLOQ.js.map +1 -0
  458. package/dist/cli-bundle/chunks/{stats-DUQWCVOS.js → stats-5CLG22YZ.js} +41 -16
  459. package/dist/cli-bundle/chunks/stats-5CLG22YZ.js.map +7 -0
  460. package/dist/cli-bundle/chunks/{stats-CUG3ZHOI.js → stats-XEMUXS42.js} +42 -17
  461. package/dist/cli-bundle/chunks/stats-XEMUXS42.js.map +1 -0
  462. package/dist/cli-bundle/chunks/{telemetry-RK2VX75A.js → telemetry-23OPBBZT.js} +7 -7
  463. package/dist/cli-bundle/chunks/telemetry-23OPBBZT.js.map +1 -0
  464. package/dist/cli-bundle/chunks/{telemetry-33MRGX4Z.js → telemetry-I3D7XZ55.js} +6 -6
  465. package/dist/cli-bundle/chunks/telemetry-I3D7XZ55.js.map +7 -0
  466. package/dist/cli-bundle/chunks/test-AROS3LIV.js +35 -0
  467. package/dist/cli-bundle/chunks/{test-Y3CTFMEC.js → test-CECIMKOA.js} +17 -14
  468. package/dist/cli-bundle/chunks/{test-all-ARSMX33Q.js → test-all-4DEQPIXH.js} +25 -17
  469. package/dist/cli-bundle/chunks/test-all-4DEQPIXH.js.map +1 -0
  470. package/dist/cli-bundle/chunks/{test-all-ANYQ33O2.js → test-all-6RO6X3SM.js} +24 -16
  471. package/dist/cli-bundle/chunks/test-all-6RO6X3SM.js.map +7 -0
  472. package/dist/cli-bundle/chunks/{test-runs-5URSD34O.js → test-runs-AAXVFWKH.js} +62 -65
  473. package/dist/cli-bundle/chunks/test-runs-AAXVFWKH.js.map +1 -0
  474. package/dist/cli-bundle/chunks/{test-runs-XNACGSNQ.js → test-runs-LYBQSYRC.js} +61 -64
  475. package/dist/cli-bundle/chunks/test-runs-LYBQSYRC.js.map +7 -0
  476. package/dist/cli-bundle/chunks/update-MIWEJC76.js +24 -0
  477. package/dist/cli-bundle/chunks/update-P7I5YSRB.js +28 -0
  478. package/dist/cli-bundle/chunks/{update-many-724JCVDE.js → update-many-5B4HLVBK.js} +79 -33
  479. package/dist/cli-bundle/chunks/update-many-5B4HLVBK.js.map +7 -0
  480. package/dist/cli-bundle/chunks/{update-many-6B7PJ33I.js → update-many-G2QOVZSB.js} +80 -34
  481. package/dist/cli-bundle/chunks/update-many-G2QOVZSB.js.map +1 -0
  482. package/dist/cli-bundle/chunks/{upgrade-QHRGDBSA.js → upgrade-GFIDL62L.js} +23 -9
  483. package/dist/cli-bundle/chunks/upgrade-GFIDL62L.js.map +1 -0
  484. package/dist/cli-bundle/chunks/{upgrade-ALBEZAI7.js → upgrade-QUQYL7D3.js} +22 -8
  485. package/dist/cli-bundle/chunks/upgrade-QUQYL7D3.js.map +7 -0
  486. package/dist/cli-bundle/chunks/{validate-UY6DRCG5.js → validate-ADDZBMM3.js} +236 -30
  487. package/dist/cli-bundle/chunks/validate-ADDZBMM3.js.map +7 -0
  488. package/dist/cli-bundle/chunks/{validate-IQRYFXIV.js → validate-MAS3H6ZP.js} +222 -30
  489. package/dist/cli-bundle/chunks/validate-MAS3H6ZP.js.map +1 -0
  490. package/dist/cli-bundle/main.js +312 -139
  491. package/dist/cli-bundle/main.js.map +3 -3
  492. package/dist/cli.d.ts +10 -0
  493. package/dist/cli.js +21 -8
  494. package/dist/cli.js.map +1 -1
  495. package/dist/core/config/nested-settings.js +40 -2
  496. package/dist/core/config/nested-settings.js.map +1 -1
  497. package/dist/core/diagnostics/remediation.js +7 -2
  498. package/dist/core/diagnostics/remediation.js.map +1 -1
  499. package/dist/core/extensions/extension-policy.js +14 -15
  500. package/dist/core/extensions/extension-policy.js.map +1 -1
  501. package/dist/core/extensions/item-fields.js +4 -5
  502. package/dist/core/extensions/item-fields.js.map +1 -1
  503. package/dist/core/extensions/loader.d.ts +75 -1
  504. package/dist/core/extensions/loader.js +56 -32
  505. package/dist/core/extensions/loader.js.map +1 -1
  506. package/dist/core/governance/content-fields.d.ts +84 -0
  507. package/dist/core/governance/content-fields.js +182 -0
  508. package/dist/core/governance/content-fields.js.map +1 -0
  509. package/dist/core/governance/issue-codes.d.ts +51 -0
  510. package/dist/core/governance/issue-codes.js +95 -0
  511. package/dist/core/governance/issue-codes.js.map +1 -0
  512. package/dist/core/governance/metadata-coverage.d.ts +168 -0
  513. package/dist/core/governance/metadata-coverage.js +362 -0
  514. package/dist/core/governance/metadata-coverage.js.map +1 -0
  515. package/dist/core/history/history-rewrite.d.ts +22 -0
  516. package/dist/core/history/history-rewrite.js +38 -2
  517. package/dist/core/history/history-rewrite.js.map +1 -1
  518. package/dist/core/history/history.d.ts +7 -0
  519. package/dist/core/history/history.js +6 -2
  520. package/dist/core/history/history.js.map +1 -1
  521. package/dist/core/io/body-file.d.ts +14 -0
  522. package/dist/core/io/body-file.js +47 -0
  523. package/dist/core/io/body-file.js.map +1 -0
  524. package/dist/core/item/item-format.d.ts +46 -1
  525. package/dist/core/item/item-format.js +51 -60
  526. package/dist/core/item/item-format.js.map +1 -1
  527. package/dist/core/item/parse.d.ts +41 -0
  528. package/dist/core/item/parse.js +69 -16
  529. package/dist/core/item/parse.js.map +1 -1
  530. package/dist/core/item/type-registry.d.ts +1 -0
  531. package/dist/core/item/type-registry.js +8 -10
  532. package/dist/core/item/type-registry.js.map +1 -1
  533. package/dist/core/lock/lock.d.ts +26 -0
  534. package/dist/core/lock/lock.js +10 -2
  535. package/dist/core/lock/lock.js.map +1 -1
  536. package/dist/core/output/output.d.ts +7 -0
  537. package/dist/core/output/output.js +6 -2
  538. package/dist/core/output/output.js.map +1 -1
  539. package/dist/core/schema/fields-file.d.ts +94 -0
  540. package/dist/core/schema/fields-file.js +317 -0
  541. package/dist/core/schema/fields-file.js.map +1 -0
  542. package/dist/core/schema/item-types-file.d.ts +25 -2
  543. package/dist/core/schema/item-types-file.js +78 -6
  544. package/dist/core/schema/item-types-file.js.map +1 -1
  545. package/dist/core/schema/runtime-schema.d.ts +7 -0
  546. package/dist/core/schema/runtime-schema.js +23 -16
  547. package/dist/core/schema/runtime-schema.js.map +1 -1
  548. package/dist/core/schema/type-inference.d.ts +34 -0
  549. package/dist/core/schema/type-inference.js +97 -0
  550. package/dist/core/schema/type-inference.js.map +1 -0
  551. package/dist/core/schema/type-presets.d.ts +30 -0
  552. package/dist/core/schema/type-presets.js +96 -0
  553. package/dist/core/schema/type-presets.js.map +1 -0
  554. package/dist/core/search/cache.d.ts +19 -1
  555. package/dist/core/search/cache.js +11 -3
  556. package/dist/core/search/cache.js.map +1 -1
  557. package/dist/core/search/corpus.d.ts +36 -2
  558. package/dist/core/search/corpus.js +120 -24
  559. package/dist/core/search/corpus.js.map +1 -1
  560. package/dist/core/search/providers.d.ts +19 -0
  561. package/dist/core/search/providers.js +19 -2
  562. package/dist/core/search/providers.js.map +1 -1
  563. package/dist/core/sentry/instrument.d.ts +1 -0
  564. package/dist/core/sentry/instrument.js +6 -2
  565. package/dist/core/sentry/instrument.js.map +1 -1
  566. package/dist/core/session/session-state.d.ts +16 -0
  567. package/dist/core/session/session-state.js +48 -0
  568. package/dist/core/session/session-state.js.map +1 -0
  569. package/dist/core/shared/constants.d.ts +8 -0
  570. package/dist/core/shared/constants.js +11 -2
  571. package/dist/core/shared/constants.js.map +1 -1
  572. package/dist/core/shared/text-normalization.js +4 -3
  573. package/dist/core/shared/text-normalization.js.map +1 -1
  574. package/dist/core/shared/time.d.ts +13 -0
  575. package/dist/core/shared/time.js +19 -7
  576. package/dist/core/shared/time.js.map +1 -1
  577. package/dist/core/store/front-matter-cache.d.ts +13 -0
  578. package/dist/core/store/front-matter-cache.js +21 -11
  579. package/dist/core/store/front-matter-cache.js.map +1 -1
  580. package/dist/core/store/item-store.d.ts +11 -0
  581. package/dist/core/store/item-store.js +12 -3
  582. package/dist/core/store/item-store.js.map +1 -1
  583. package/dist/core/store/settings-validator.d.ts +2 -0
  584. package/dist/core/store/settings-validator.js +25 -2
  585. package/dist/core/store/settings-validator.js.map +1 -1
  586. package/dist/core/store/settings.d.ts +60 -1
  587. package/dist/core/store/settings.js +100 -46
  588. package/dist/core/store/settings.js.map +1 -1
  589. package/dist/core/telemetry/observability.js +10 -8
  590. package/dist/core/telemetry/observability.js.map +1 -1
  591. package/dist/core/telemetry/runtime.d.ts +272 -1
  592. package/dist/core/telemetry/runtime.js +358 -37
  593. package/dist/core/telemetry/runtime.js.map +1 -1
  594. package/dist/core/test/background-runs.d.ts +35 -0
  595. package/dist/core/test/background-runs.js +72 -61
  596. package/dist/core/test/background-runs.js.map +1 -1
  597. package/dist/core/test/run-selectors.js +5 -4
  598. package/dist/core/test/run-selectors.js.map +1 -1
  599. package/dist/core/validate/estimate-defaults.d.ts +39 -0
  600. package/dist/core/validate/estimate-defaults.js +117 -0
  601. package/dist/core/validate/estimate-defaults.js.map +1 -0
  602. package/dist/core/validate/fix-planning.d.ts +21 -3
  603. package/dist/core/validate/fix-planning.js +31 -4
  604. package/dist/core/validate/fix-planning.js.map +1 -1
  605. package/dist/core/validate/missing-link-owners.d.ts +64 -0
  606. package/dist/core/validate/missing-link-owners.js +98 -0
  607. package/dist/core/validate/missing-link-owners.js.map +1 -0
  608. package/dist/mcp/server.d.ts +61 -0
  609. package/dist/mcp/server.js +98 -8
  610. package/dist/mcp/server.js.map +1 -1
  611. package/dist/mcp/tool-definitions.js +64 -10
  612. package/dist/mcp/tool-definitions.js.map +1 -1
  613. package/dist/sdk/cli-contracts/commander-types.js +13 -2
  614. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  615. package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
  616. package/dist/sdk/cli-contracts/enum-contracts.js +7 -2
  617. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  618. package/dist/sdk/cli-contracts/tool-option-contracts.js +110 -2
  619. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  620. package/dist/sdk/cli-contracts/tool-parameter-tables.js +127 -11
  621. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  622. package/dist/sdk/cli-contracts.d.ts +31 -0
  623. package/dist/sdk/cli-contracts.js +238 -12
  624. package/dist/sdk/cli-contracts.js.map +1 -1
  625. package/dist/types.d.ts +17 -1
  626. package/dist/types.js +3 -3
  627. package/dist/types.js.map +1 -1
  628. package/docs/AGENT_GUIDE.md +15 -3
  629. package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
  630. package/docs/COMMANDS.md +171 -10
  631. package/docs/CONFIGURATION.md +135 -0
  632. package/docs/TESTING.md +6 -4
  633. package/package.json +6 -4
  634. package/packages/pm-calendar/extensions/calendar/runtime.js +6 -0
  635. package/packages/pm-calendar/extensions/calendar/runtime.ts +12 -0
  636. package/packages/pm-todos/extensions/todos/runtime.ts +5 -0
  637. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  638. package/plugins/pm-claude/README.md +3 -3
  639. package/plugins/pm-claude/commands/pm-init.md +1 -1
  640. package/plugins/pm-codex/README.md +1 -1
  641. package/scripts/bundle-cli.mjs +46 -37
  642. package/scripts/finalize-build.mjs +20 -9
  643. package/scripts/prepare-build-cache.mjs +27 -16
  644. package/dist/cli-bundle/chunks/activity-XIOTGZMU.js +0 -16
  645. package/dist/cli-bundle/chunks/aggregate-IRHJWEKG.js.map +0 -1
  646. package/dist/cli-bundle/chunks/aggregate-XEBW22UQ.js.map +0 -7
  647. package/dist/cli-bundle/chunks/append-NL67JNJU.js.map +0 -1
  648. package/dist/cli-bundle/chunks/chunk-2ANTZBYF.js.map +0 -1
  649. package/dist/cli-bundle/chunks/chunk-2J2AH4V5.js.map +0 -1
  650. package/dist/cli-bundle/chunks/chunk-32XSW44C.js.map +0 -1
  651. package/dist/cli-bundle/chunks/chunk-36BCSMKP.js.map +0 -7
  652. package/dist/cli-bundle/chunks/chunk-3VULHQNS.js.map +0 -1
  653. package/dist/cli-bundle/chunks/chunk-4FHLNNW7.js.map +0 -7
  654. package/dist/cli-bundle/chunks/chunk-4JHJ7YG2.js.map +0 -7
  655. package/dist/cli-bundle/chunks/chunk-4TPFXE2R.js.map +0 -1
  656. package/dist/cli-bundle/chunks/chunk-4ZKKZMLH.js.map +0 -1
  657. package/dist/cli-bundle/chunks/chunk-5HSAHRYA.js.map +0 -7
  658. package/dist/cli-bundle/chunks/chunk-6TBR5AZ2.js.map +0 -7
  659. package/dist/cli-bundle/chunks/chunk-7CRFV6JR.js.map +0 -7
  660. package/dist/cli-bundle/chunks/chunk-7SM7VA5I.js.map +0 -7
  661. package/dist/cli-bundle/chunks/chunk-AAUYXSFF.js.map +0 -7
  662. package/dist/cli-bundle/chunks/chunk-AGG32LKL.js.map +0 -1
  663. package/dist/cli-bundle/chunks/chunk-AUDDXKNX.js.map +0 -1
  664. package/dist/cli-bundle/chunks/chunk-BVL5KGVA.js.map +0 -1
  665. package/dist/cli-bundle/chunks/chunk-C24PWDFG.js +0 -138
  666. package/dist/cli-bundle/chunks/chunk-C24PWDFG.js.map +0 -7
  667. package/dist/cli-bundle/chunks/chunk-HLEGAQXT.js.map +0 -7
  668. package/dist/cli-bundle/chunks/chunk-HZOX5BYD.js.map +0 -7
  669. package/dist/cli-bundle/chunks/chunk-IXVSSHGV.js.map +0 -7
  670. package/dist/cli-bundle/chunks/chunk-IZHCCG4S.js.map +0 -1
  671. package/dist/cli-bundle/chunks/chunk-JW7D6437.js.map +0 -1
  672. package/dist/cli-bundle/chunks/chunk-JWXTOYBI.js.map +0 -7
  673. package/dist/cli-bundle/chunks/chunk-KHGTYCJ6.js.map +0 -1
  674. package/dist/cli-bundle/chunks/chunk-L6YQONLM.js.map +0 -1
  675. package/dist/cli-bundle/chunks/chunk-LFW5NQUP.js.map +0 -7
  676. package/dist/cli-bundle/chunks/chunk-LYNQ3NGI.js.map +0 -1
  677. package/dist/cli-bundle/chunks/chunk-M3SI2REU.js.map +0 -7
  678. package/dist/cli-bundle/chunks/chunk-MACCNKSZ.js.map +0 -7
  679. package/dist/cli-bundle/chunks/chunk-MGAQ6KZG.js.map +0 -7
  680. package/dist/cli-bundle/chunks/chunk-PEH7SZD2.js.map +0 -7
  681. package/dist/cli-bundle/chunks/chunk-PNYAAB4S.js.map +0 -1
  682. package/dist/cli-bundle/chunks/chunk-QQG4HEX7.js.map +0 -1
  683. package/dist/cli-bundle/chunks/chunk-R4VWYWRN.js.map +0 -7
  684. package/dist/cli-bundle/chunks/chunk-RFR2YQGO.js.map +0 -1
  685. package/dist/cli-bundle/chunks/chunk-RHYBR6G7.js.map +0 -1
  686. package/dist/cli-bundle/chunks/chunk-S2CDTRJ6.js.map +0 -1
  687. package/dist/cli-bundle/chunks/chunk-SGMGMCIF.js.map +0 -1
  688. package/dist/cli-bundle/chunks/chunk-SOHXUA2Q.js.map +0 -1
  689. package/dist/cli-bundle/chunks/chunk-SQDKAEKG.js.map +0 -7
  690. package/dist/cli-bundle/chunks/chunk-TOX7YQ7X.js.map +0 -1
  691. package/dist/cli-bundle/chunks/chunk-TSXWFN3L.js.map +0 -1
  692. package/dist/cli-bundle/chunks/chunk-UCVJP4JL.js.map +0 -7
  693. package/dist/cli-bundle/chunks/chunk-V4KP3TCN.js +0 -128
  694. package/dist/cli-bundle/chunks/chunk-V4KP3TCN.js.map +0 -1
  695. package/dist/cli-bundle/chunks/chunk-VNC2HBL4.js.map +0 -1
  696. package/dist/cli-bundle/chunks/chunk-W6KNFAMZ.js.map +0 -7
  697. package/dist/cli-bundle/chunks/chunk-WLH7X4RN.js.map +0 -7
  698. package/dist/cli-bundle/chunks/chunk-XXLMJDUB.js.map +0 -7
  699. package/dist/cli-bundle/chunks/close-WOG5WTMZ.js +0 -13
  700. package/dist/cli-bundle/chunks/close-many-GKAJX54X.js.map +0 -1
  701. package/dist/cli-bundle/chunks/close-many-GL6NRUU5.js.map +0 -7
  702. package/dist/cli-bundle/chunks/comments-5FPT6L7N.js.map +0 -1
  703. package/dist/cli-bundle/chunks/comments-TOLOYWNI.js.map +0 -7
  704. package/dist/cli-bundle/chunks/config-4MN45TIH.js.map +0 -1
  705. package/dist/cli-bundle/chunks/config-7N6D7YJE.js.map +0 -7
  706. package/dist/cli-bundle/chunks/context-AQSLE7DZ.js.map +0 -1
  707. package/dist/cli-bundle/chunks/context-U3PUJMVN.js.map +0 -7
  708. package/dist/cli-bundle/chunks/contracts-H7KCQXLY.js.map +0 -7
  709. package/dist/cli-bundle/chunks/contracts-ITSJXO3O.js.map +0 -1
  710. package/dist/cli-bundle/chunks/create-NW3K7LVG.js +0 -27
  711. package/dist/cli-bundle/chunks/deps-HV2C2L46.js.map +0 -1
  712. package/dist/cli-bundle/chunks/files-LIFDKNCN.js.map +0 -7
  713. package/dist/cli-bundle/chunks/files-OIFN3DQX.js.map +0 -1
  714. package/dist/cli-bundle/chunks/get-K7UULTQF.js.map +0 -7
  715. package/dist/cli-bundle/chunks/get-SAB7CRBG.js.map +0 -1
  716. package/dist/cli-bundle/chunks/health-NUVZYIEV.js.map +0 -1
  717. package/dist/cli-bundle/chunks/health-VJWH3ZFK.js.map +0 -7
  718. package/dist/cli-bundle/chunks/history-IUVN4NTN.js +0 -20
  719. package/dist/cli-bundle/chunks/history-compact-SLL6ESXH.js.map +0 -1
  720. package/dist/cli-bundle/chunks/history-compact-WQZQ6KXM.js.map +0 -7
  721. package/dist/cli-bundle/chunks/history-redact-75KIIJUJ.js +0 -19
  722. package/dist/cli-bundle/chunks/history-repair-BJCGM6Q3.js.map +0 -1
  723. package/dist/cli-bundle/chunks/history-repair-UCYS55ZX.js.map +0 -7
  724. package/dist/cli-bundle/chunks/init-JJFYRUKG.js +0 -17
  725. package/dist/cli-bundle/chunks/learnings-L6KTZGOT.js.map +0 -1
  726. package/dist/cli-bundle/chunks/learnings-QKJOKEAO.js.map +0 -7
  727. package/dist/cli-bundle/chunks/list-GGVPXEV6.js +0 -23
  728. package/dist/cli-bundle/chunks/list-VOQDQHA4.js +0 -19
  729. package/dist/cli-bundle/chunks/notes-3NLK7WTZ.js.map +0 -1
  730. package/dist/cli-bundle/chunks/notes-HMCB7TK6.js.map +0 -7
  731. package/dist/cli-bundle/chunks/plan-DWBYI5C6.js.map +0 -1
  732. package/dist/cli-bundle/chunks/plan-NANUWH4T.js.map +0 -7
  733. package/dist/cli-bundle/chunks/register-list-query-PWQ5F2VI.js.map +0 -7
  734. package/dist/cli-bundle/chunks/register-list-query-SMMMLSWW.js.map +0 -1
  735. package/dist/cli-bundle/chunks/register-mutation-QKFPTIZG.js.map +0 -7
  736. package/dist/cli-bundle/chunks/register-mutation-ZYJQ4DVP.js.map +0 -1
  737. package/dist/cli-bundle/chunks/register-operations-2FMZ6WEF.js.map +0 -7
  738. package/dist/cli-bundle/chunks/register-operations-BAFQURZG.js.map +0 -1
  739. package/dist/cli-bundle/chunks/register-setup-DQEIKBIP.js.map +0 -7
  740. package/dist/cli-bundle/chunks/register-setup-QN2XV7UL.js.map +0 -1
  741. package/dist/cli-bundle/chunks/restore-DRBNXJJH.js +0 -17
  742. package/dist/cli-bundle/chunks/schema-RNVJ55V2.js.map +0 -7
  743. package/dist/cli-bundle/chunks/schema-ZZ7ZDM2X.js.map +0 -1
  744. package/dist/cli-bundle/chunks/search-BJ457C2A.js.map +0 -7
  745. package/dist/cli-bundle/chunks/search-FQDZXX7P.js.map +0 -1
  746. package/dist/cli-bundle/chunks/stats-CUG3ZHOI.js.map +0 -1
  747. package/dist/cli-bundle/chunks/stats-DUQWCVOS.js.map +0 -7
  748. package/dist/cli-bundle/chunks/telemetry-33MRGX4Z.js.map +0 -7
  749. package/dist/cli-bundle/chunks/telemetry-RK2VX75A.js.map +0 -1
  750. package/dist/cli-bundle/chunks/test-SDMYEQHH.js +0 -32
  751. package/dist/cli-bundle/chunks/test-all-ANYQ33O2.js.map +0 -7
  752. package/dist/cli-bundle/chunks/test-all-ARSMX33Q.js.map +0 -1
  753. package/dist/cli-bundle/chunks/test-runs-5URSD34O.js.map +0 -1
  754. package/dist/cli-bundle/chunks/test-runs-XNACGSNQ.js.map +0 -7
  755. package/dist/cli-bundle/chunks/update-PD46VOXI.js +0 -21
  756. package/dist/cli-bundle/chunks/update-U235A7WP.js +0 -25
  757. package/dist/cli-bundle/chunks/update-many-6B7PJ33I.js.map +0 -1
  758. package/dist/cli-bundle/chunks/update-many-724JCVDE.js.map +0 -7
  759. package/dist/cli-bundle/chunks/upgrade-ALBEZAI7.js.map +0 -7
  760. package/dist/cli-bundle/chunks/upgrade-QHRGDBSA.js.map +0 -1
  761. package/dist/cli-bundle/chunks/validate-IQRYFXIV.js.map +0 -1
  762. package/dist/cli-bundle/chunks/validate-UY6DRCG5.js.map +0 -7
  763. /package/dist/cli-bundle/chunks/{activity-XIOTGZMU.js.map → activity-PZYSZA26.js.map} +0 -0
  764. /package/dist/cli-bundle/chunks/{activity-PPO7QWJF.js.map → activity-SFM4THAU.js.map} +0 -0
  765. /package/dist/cli-bundle/chunks/{chunk-IIOIBAQW.js.map → chunk-26BM6YLO.js.map} +0 -0
  766. /package/dist/cli-bundle/chunks/{chunk-LSSTKL3Y.js.map → chunk-2TMKMTEI.js.map} +0 -0
  767. /package/dist/cli-bundle/chunks/{chunk-QU3OPNVV.js.map → chunk-2VH7DFSJ.js.map} +0 -0
  768. /package/dist/cli-bundle/chunks/{chunk-LGOXXQUW.js.map → chunk-5XGWFUW2.js.map} +0 -0
  769. /package/dist/cli-bundle/chunks/{chunk-Z647PYLD.js.map → chunk-AJCQ5GT6.js.map} +0 -0
  770. /package/dist/cli-bundle/chunks/{chunk-DWG4FHPY.js.map → chunk-BITCVGHT.js.map} +0 -0
  771. /package/dist/cli-bundle/chunks/{chunk-JE5IZXDS.js.map → chunk-CGQTFWYI.js.map} +0 -0
  772. /package/dist/cli-bundle/chunks/{chunk-VYZNX4C5.js.map → chunk-COVLE33A.js.map} +0 -0
  773. /package/dist/cli-bundle/chunks/{chunk-6ZFTM65G.js.map → chunk-F5MSD5HE.js.map} +0 -0
  774. /package/dist/cli-bundle/chunks/{chunk-GOO4UXBI.js.map → chunk-JZHL4E3Q.js.map} +0 -0
  775. /package/dist/cli-bundle/chunks/{chunk-NN6RKGFW.js.map → chunk-KCAGIH6K.js.map} +0 -0
  776. /package/dist/cli-bundle/chunks/{chunk-3CQPVBK3.js.map → chunk-MIBX6ZRN.js.map} +0 -0
  777. /package/dist/cli-bundle/chunks/{chunk-XOYHMHFF.js.map → chunk-UN6P3IJ4.js.map} +0 -0
  778. /package/dist/cli-bundle/chunks/{chunk-HWHONML5.js.map → chunk-VF3KQGNY.js.map} +0 -0
  779. /package/dist/cli-bundle/chunks/{claim-HE6KEGJW.js.map → claim-WGAWJCPY.js.map} +0 -0
  780. /package/dist/cli-bundle/chunks/{claim-QJOQBH7J.js.map → claim-ZI6P4LMU.js.map} +0 -0
  781. /package/dist/cli-bundle/chunks/{close-WOG5WTMZ.js.map → close-I7PRQ5G7.js.map} +0 -0
  782. /package/dist/cli-bundle/chunks/{close-SPUFW5QR.js.map → close-JMVVSIQE.js.map} +0 -0
  783. /package/dist/cli-bundle/chunks/{copy-EB3MUCSW.js.map → copy-Q2PPU4AY.js.map} +0 -0
  784. /package/dist/cli-bundle/chunks/{copy-C4W522JM.js.map → copy-SC6UF3PI.js.map} +0 -0
  785. /package/dist/cli-bundle/chunks/{create-4EQNELMY.js.map → create-76FE7JVF.js.map} +0 -0
  786. /package/dist/cli-bundle/chunks/{create-NW3K7LVG.js.map → create-RTRFW6RE.js.map} +0 -0
  787. /package/dist/cli-bundle/chunks/{delete-X5QLXIQX.js.map → delete-T6DJSUJI.js.map} +0 -0
  788. /package/dist/cli-bundle/chunks/{delete-ZLGUYIXU.js.map → delete-XFUX533E.js.map} +0 -0
  789. /package/dist/cli-bundle/chunks/{docs-SRTLCQOL.js.map → docs-HE3HCQ4S.js.map} +0 -0
  790. /package/dist/cli-bundle/chunks/{docs-RJQPLROO.js.map → docs-SXMOABHR.js.map} +0 -0
  791. /package/dist/cli-bundle/chunks/{extension-WKPVPNCC.js.map → extension-E23K4QRR.js.map} +0 -0
  792. /package/dist/cli-bundle/chunks/{extension-MM3TVWOO.js.map → extension-PMD3XMLN.js.map} +0 -0
  793. /package/dist/cli-bundle/chunks/{gc-NRFHLVFT.js.map → gc-BXIAKLAH.js.map} +0 -0
  794. /package/dist/cli-bundle/chunks/{gc-DL6AVOX5.js.map → gc-C7K6JNUO.js.map} +0 -0
  795. /package/dist/cli-bundle/chunks/{history-GYFD2DJW.js.map → history-73Z6OBFZ.js.map} +0 -0
  796. /package/dist/cli-bundle/chunks/{history-IUVN4NTN.js.map → history-BIPHVUMF.js.map} +0 -0
  797. /package/dist/cli-bundle/chunks/{history-redact-SDTDR6WM.js.map → history-redact-7YCXEWJD.js.map} +0 -0
  798. /package/dist/cli-bundle/chunks/{history-redact-75KIIJUJ.js.map → history-redact-WZZ6GZ2Z.js.map} +0 -0
  799. /package/dist/cli-bundle/chunks/{init-JJFYRUKG.js.map → init-K34V4PZR.js.map} +0 -0
  800. /package/dist/cli-bundle/chunks/{init-MXV57LKL.js.map → init-TDEDNVMM.js.map} +0 -0
  801. /package/dist/cli-bundle/chunks/{list-GGVPXEV6.js.map → list-MSHYOCFU.js.map} +0 -0
  802. /package/dist/cli-bundle/chunks/{list-VOQDQHA4.js.map → list-VV57WGUD.js.map} +0 -0
  803. /package/dist/cli-bundle/chunks/{restore-FJQWXMPY.js.map → restore-TSWSULYY.js.map} +0 -0
  804. /package/dist/cli-bundle/chunks/{restore-DRBNXJJH.js.map → restore-XQXICL3V.js.map} +0 -0
  805. /package/dist/cli-bundle/chunks/{test-SDMYEQHH.js.map → test-AROS3LIV.js.map} +0 -0
  806. /package/dist/cli-bundle/chunks/{test-Y3CTFMEC.js.map → test-CECIMKOA.js.map} +0 -0
  807. /package/dist/cli-bundle/chunks/{update-PD46VOXI.js.map → update-MIWEJC76.js.map} +0 -0
  808. /package/dist/cli-bundle/chunks/{update-U235A7WP.js.map → update-P7I5YSRB.js.map} +0 -0
@@ -1,11 +1,20 @@
1
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]="9d7e4d46-ea22-536a-8a47-90006a264b88")}catch(e){}}();
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]="7af73b5c-b50d-50c9-95e7-c6ed4caefbeb")}catch(e){}}();
3
+ import {
4
+ toDefaultFolder
5
+ } from "./chunk-V2GYOMEX.js";
3
6
  import {
4
7
  BUILTIN_ITEM_TYPE_VALUES
5
- } from "./chunk-S2CDTRJ6.js";
8
+ } from "./chunk-SJCMTOEU.js";
6
9
 
7
10
  // dist/core/schema/item-types-file.js
8
11
  var BUILTIN_NAME_LOOKUP = new Map(BUILTIN_ITEM_TYPE_VALUES.map((name) => [name.toLowerCase(), name]));
12
+ var TYPE_NAME_TOKEN_PATTERN = /^[A-Za-z][A-Za-z0-9_-]*$/;
13
+ function assertValidTypeToken(value, label) {
14
+ if (!TYPE_NAME_TOKEN_PATTERN.test(value)) {
15
+ throw new Error(`${label} "${value}" is not a valid identifier. Use a single letter-led token of letters, digits, hyphen, or underscore with no spaces or punctuation (e.g. "Spike" or "code-review").`);
16
+ }
17
+ }
9
18
  function matchBuiltinTypeName(name) {
10
19
  return BUILTIN_NAME_LOOKUP.get(name.trim().toLowerCase());
11
20
  }
@@ -34,6 +43,7 @@ function normalizeAddTypeInput(raw) {
34
43
  if (name.length === 0) {
35
44
  throw new Error("Type name must not be empty.");
36
45
  }
46
+ assertValidTypeToken(name, "Type name");
37
47
  const builtinMatch = matchBuiltinTypeName(name);
38
48
  if (builtinMatch) {
39
49
  throw new Error(`Cannot redefine built-in item type "${builtinMatch}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);
@@ -43,6 +53,7 @@ function normalizeAddTypeInput(raw) {
43
53
  const folder = raw.folder?.trim();
44
54
  const aliases = dedupeAliases(raw.aliases ?? []);
45
55
  for (const alias of aliases) {
56
+ assertValidTypeToken(alias, "Alias");
46
57
  const aliasBuiltin = matchBuiltinTypeName(alias);
47
58
  if (aliasBuiltin) {
48
59
  throw new Error(`Alias "${alias}" collides with built-in item type "${aliasBuiltin}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);
@@ -85,6 +96,35 @@ function assertAliasesAvailable(input, existing) {
85
96
  }
86
97
  }
87
98
  }
99
+ function resolveDefinitionFolder(name, folder) {
100
+ if (typeof folder === "string" && folder.trim().length > 0) {
101
+ return folder.trim().toLowerCase();
102
+ }
103
+ return toDefaultFolder(name).toLowerCase();
104
+ }
105
+ function assertTypeFolderAvailable(input, existing, reservedFolders) {
106
+ const selfLower = input.name.toLowerCase();
107
+ const inputFolder = resolveDefinitionFolder(input.name, input.folder);
108
+ const fail = (ownerName) => {
109
+ throw new Error(`Item type "${input.name}" would store items in folder "${inputFolder}", which already belongs to existing item type "${ownerName}". Pass a distinct --folder to keep their storage separate.`);
110
+ };
111
+ for (const definition of existing.definitions) {
112
+ if (typeof definition.name !== "string") {
113
+ continue;
114
+ }
115
+ const definitionName = definition.name.trim();
116
+ if (definitionName.length === 0 || definitionName.toLowerCase() === selfLower) {
117
+ continue;
118
+ }
119
+ if (resolveDefinitionFolder(definitionName, definition.folder) === inputFolder) {
120
+ fail(definitionName);
121
+ }
122
+ }
123
+ const reservedOwner = reservedFolders?.get(inputFolder);
124
+ if (reservedOwner !== void 0 && reservedOwner.toLowerCase() !== selfLower) {
125
+ fail(reservedOwner);
126
+ }
127
+ }
88
128
  function parseItemTypesFile(raw) {
89
129
  if (raw === null || raw === void 0 || raw.trim().length === 0) {
90
130
  return { definitions: [] };
@@ -163,7 +203,8 @@ function upsertItemType(file, input) {
163
203
  return {
164
204
  file: { definitions },
165
205
  definition: next,
166
- replaced: existingIndex >= 0
206
+ replaced: existingIndex >= 0,
207
+ ...existing && typeof existing.name === "string" ? { previousName: existing.name } : {}
167
208
  };
168
209
  }
169
210
  function removeItemType(file, name) {
@@ -194,18 +235,21 @@ function serializeItemTypesFile(file) {
194
235
  return `${JSON.stringify({ definitions: file.definitions }, null, 2)}
195
236
  `;
196
237
  }
197
- function buildInvalidTypeHint(name) {
238
+ function buildInvalidTypeHint(name, typesFilePath) {
198
239
  const safeName = name.trim().length > 0 ? name.trim() : name;
199
- return `To register a custom type, run: pm schema add-type "${escapeForDoubleQuotes(safeName)}" (writes .agents/pm/schema/types.json).`;
240
+ const target = typesFilePath?.trim() || ".agents/pm/schema/types.json";
241
+ return `To register a custom type, run: pm schema add-type "${escapeForDoubleQuotes(safeName)}" (writes ${target}).`;
200
242
  }
201
- function buildInvalidTypeError(name, allowedTypes) {
202
- return `Invalid type value "${name}". Allowed: ${allowedTypes.join(", ")}. ${buildInvalidTypeHint(name)}`;
243
+ function buildInvalidTypeError(name, allowedTypes, typesFilePath) {
244
+ return `Invalid type value "${name}". Allowed: ${allowedTypes.join(", ")}. ${buildInvalidTypeHint(name, typesFilePath)}`;
203
245
  }
204
246
 
205
247
  export {
248
+ matchBuiltinTypeName,
206
249
  escapeForDoubleQuotes,
207
250
  normalizeAddTypeInput,
208
251
  assertAliasesAvailable,
252
+ assertTypeFolderAvailable,
209
253
  parseItemTypesFile,
210
254
  upsertItemType,
211
255
  removeItemType,
@@ -213,6 +257,6 @@ export {
213
257
  buildInvalidTypeHint,
214
258
  buildInvalidTypeError
215
259
  };
216
- //# sourceMappingURL=chunk-TSXWFN3L.js.map
260
+ //# sourceMappingURL=chunk-6VFUEGOA.js.map
217
261
 
218
- //# debugId=9d7e4d46-ea22-536a-8a47-90006a264b88
262
+ //# debugId=7af73b5c-b50d-50c9-95e7-c6ed4caefbeb
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../core/schema/item-types-file.ts"],"sourcesContent":["import { BUILTIN_ITEM_TYPE_VALUES } from \"../../types/index.js\";\nimport type { ItemTypeDefinition } from \"../../types/index.js\";\nimport { toDefaultFolder } from \"../item/type-registry.js\";\n\nexport type { ItemTypeDefinition } from \"../../types/index.js\";\n\n/**\n * Pure logic for the `pm schema add-type` command and the create/update\n * invalid-type discoverability hint. The CLI command file (schema.ts) handles\n * IO/governance; everything testable and side-effect-free lives here so it can\n * be coverage-gated to 100%.\n */\n\nconst BUILTIN_NAME_LOOKUP = new Map<string, string>(\n BUILTIN_ITEM_TYPE_VALUES.map((name) => [name.toLowerCase(), name]),\n);\n\n/**\n * The shape persisted at `.agents/pm/schema/types.json`.\n */\nexport interface ItemTypesFile {\n definitions: ItemTypeDefinition[];\n}\n\nexport interface NormalizedAddTypeInput {\n name: string;\n description?: string;\n defaultStatus?: string;\n folder?: string;\n aliases: string[];\n}\n\nexport interface RawAddTypeInput {\n name: string | undefined;\n description?: string;\n defaultStatus?: string;\n folder?: string;\n aliases?: string[];\n}\n\nexport interface UpsertItemTypeResult {\n file: ItemTypesFile;\n /** The definition as stored after the upsert (existing fields preserved). */\n definition: ItemTypeDefinition;\n /** True when an existing definition with the same (case-insensitive) name was replaced. */\n replaced: boolean;\n /**\n * The canonical name of the replaced definition (only present when `replaced`).\n * Lets the caller detect a silent recase (e.g. \"Spike\" -> \"spike\") and warn.\n */\n previousName?: string;\n}\n\n/**\n * Custom item type names (and aliases) must be a single letter-led identifier\n * token: letters, digits, hyphen, or underscore — no whitespace or other\n * punctuation. This keeps names copy-pasteable as shell arguments and folder\n * slugs deterministic, matching the single-token PascalCase shape of every\n * built-in type. Folder/slug overlap between two distinct valid tokens (e.g.\n * \"Spike\"/\"Spikes\", \"code-review\"/\"code_review\") is rejected separately by\n * assertTypeFolderAvailable.\n */\nconst TYPE_NAME_TOKEN_PATTERN = /^[A-Za-z][A-Za-z0-9_-]*$/;\n\nfunction assertValidTypeToken(value: string, label: string): void {\n if (!TYPE_NAME_TOKEN_PATTERN.test(value)) {\n throw new Error(\n `${label} \"${value}\" is not a valid identifier. Use a single letter-led token of letters, digits, hyphen, or underscore with no spaces or punctuation (e.g. \"Spike\" or \"code-review\").`,\n );\n }\n}\n\nexport interface RemoveItemTypeResult {\n file: ItemTypesFile;\n /** True when a matching definition existed and was dropped from the file. */\n removed: boolean;\n /** The removed definition, when one matched (case-insensitively) the requested name. */\n definition?: ItemTypeDefinition;\n}\n\n/**\n * Returns the canonical built-in name when `name` collides (case-insensitively)\n * with a reserved built-in item type, otherwise undefined.\n */\nexport function matchBuiltinTypeName(name: string): string | undefined {\n return BUILTIN_NAME_LOOKUP.get(name.trim().toLowerCase());\n}\n\n/**\n * Coerces a persisted `aliases` value into a string array, tolerating malformed\n * data (a non-array, or an array containing non-string entries) without throwing\n * or exploding a stray string into character aliases.\n */\nfunction coerceAliasArray(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n}\n\n/**\n * Escapes a value for safe interpolation inside a double-quoted shell string so\n * suggested copy-pasteable commands stay well-formed for names containing\n * `\"`, `` ` ``, `$`, or `\\`.\n */\nexport function escapeForDoubleQuotes(value: string): string {\n return value.replace(/[\\\\\"`$]/g, (char) => `\\\\${char}`);\n}\n\nfunction dedupeAliases(values: Iterable<string>): string[] {\n const seen = new Map<string, string>();\n for (const value of values) {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n continue;\n }\n const key = trimmed.toLowerCase();\n if (!seen.has(key)) {\n seen.set(key, trimmed);\n }\n }\n return [...seen.values()].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Validates and normalizes raw add-type CLI input. Throws a plain Error with a\n * stable message when the name is missing/empty or collides with a built-in;\n * the CLI layer maps these to PmCliError exit codes.\n */\nexport function normalizeAddTypeInput(raw: RawAddTypeInput): NormalizedAddTypeInput {\n const name = (raw.name ?? \"\").trim();\n if (name.length === 0) {\n throw new Error(\"Type name must not be empty.\");\n }\n assertValidTypeToken(name, \"Type name\");\n const builtinMatch = matchBuiltinTypeName(name);\n if (builtinMatch) {\n throw new Error(\n `Cannot redefine built-in item type \"${builtinMatch}\". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(\", \")}.`,\n );\n }\n const description = raw.description?.trim();\n const defaultStatus = raw.defaultStatus?.trim();\n const folder = raw.folder?.trim();\n const aliases = dedupeAliases(raw.aliases ?? []);\n for (const alias of aliases) {\n assertValidTypeToken(alias, \"Alias\");\n const aliasBuiltin = matchBuiltinTypeName(alias);\n if (aliasBuiltin) {\n throw new Error(\n `Alias \"${alias}\" collides with built-in item type \"${aliasBuiltin}\". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(\", \")}.`,\n );\n }\n }\n return {\n name,\n description: description && description.length > 0 ? description : undefined,\n defaultStatus: defaultStatus && defaultStatus.length > 0 ? defaultStatus : undefined,\n folder: folder && folder.length > 0 ? folder : undefined,\n aliases,\n };\n}\n\n/**\n * Throws when the requested name or any alias collides (case-insensitively)\n * with the canonical name or an alias of a DIFFERENT existing definition.\n * Such collisions would make `pm create`/`pm update --type` resolve\n * ambiguously (the runtime registry keys a single lowercase alias map), so\n * they are rejected. Tokens belonging to the same-named definition being\n * upserted are ignored, keeping re-runs idempotent.\n */\nexport function assertAliasesAvailable(input: NormalizedAddTypeInput, existing: ItemTypesFile): void {\n const selfLower = input.name.toLowerCase();\n const taken = new Map<string, string>();\n for (const definition of existing.definitions) {\n if (typeof definition.name !== \"string\") {\n continue;\n }\n const definitionName = definition.name.trim();\n if (definitionName.length === 0 || definitionName.toLowerCase() === selfLower) {\n continue;\n }\n taken.set(definitionName.toLowerCase(), definitionName);\n for (const alias of coerceAliasArray(definition.aliases)) {\n if (alias.trim().length > 0) {\n taken.set(alias.trim().toLowerCase(), definitionName);\n }\n }\n }\n const nameOwner = taken.get(selfLower);\n if (nameOwner) {\n throw new Error(`Type name \"${input.name}\" collides with an alias of existing item type \"${nameOwner}\".`);\n }\n for (const alias of input.aliases) {\n const owner = taken.get(alias.toLowerCase());\n if (owner) {\n throw new Error(`Alias \"${alias}\" already maps to existing item type \"${owner}\".`);\n }\n }\n}\n\n/**\n * Resolves the storage folder a definition would use: an explicit non-empty\n * `folder` wins, otherwise the deterministic slug derived from the name (the\n * same derivation the runtime registry applies, single-sourced from\n * type-registry.toDefaultFolder).\n */\nfunction resolveDefinitionFolder(name: string, folder: unknown): string {\n if (typeof folder === \"string\" && folder.trim().length > 0) {\n return folder.trim().toLowerCase();\n }\n return toDefaultFolder(name).toLowerCase();\n}\n\n/**\n * Throws when the requested type's storage folder would collide with a\n * DIFFERENT existing definition's folder. Two distinct type names can slug to\n * one folder (\"Spike\"/\"Spikes\", \"code-review\"/\"code_review\"), which would make\n * their item files share a directory and silently corrupt the taxonomy. The\n * same-named definition being upserted is ignored (folder reuse on re-run is\n * expected). Resolving the collision is a matter of passing a distinct\n * `--folder`, so the error says so.\n *\n * `reservedFolders` carries the folders already owned by built-in and extension\n * types (folder-slug → owner name); a custom type whose slug matches one of\n * those (e.g. \"Tasks\" → \"tasks\", owned by the built-in Task) is just as\n * corrupting as a custom-vs-custom collision, so both are checked.\n */\nexport function assertTypeFolderAvailable(\n input: NormalizedAddTypeInput,\n existing: ItemTypesFile,\n reservedFolders?: ReadonlyMap<string, string>,\n): void {\n const selfLower = input.name.toLowerCase();\n const inputFolder = resolveDefinitionFolder(input.name, input.folder);\n const fail = (ownerName: string): never => {\n throw new Error(\n `Item type \"${input.name}\" would store items in folder \"${inputFolder}\", which already belongs to existing item type \"${ownerName}\". Pass a distinct --folder to keep their storage separate.`,\n );\n };\n for (const definition of existing.definitions) {\n if (typeof definition.name !== \"string\") {\n continue;\n }\n const definitionName = definition.name.trim();\n if (definitionName.length === 0 || definitionName.toLowerCase() === selfLower) {\n continue;\n }\n if (resolveDefinitionFolder(definitionName, definition.folder) === inputFolder) {\n fail(definitionName);\n }\n }\n const reservedOwner = reservedFolders?.get(inputFolder);\n if (reservedOwner !== undefined && reservedOwner.toLowerCase() !== selfLower) {\n fail(reservedOwner);\n }\n}\n\n/**\n * Coerces an arbitrary parsed value from types.json into an ItemTypesFile.\n * Accepts the canonical `{ definitions: [...] }` shape, a bare array of\n * definitions, or a nested `{ item_types: { definitions: [...] } }` form, and\n * tolerates a missing/invalid file by returning an empty definitions list.\n */\nexport function parseItemTypesFile(raw: string | null | undefined): ItemTypesFile {\n if (raw === null || raw === undefined || raw.trim().length === 0) {\n return { definitions: [] };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n throw new Error(\"schema/types.json contains invalid JSON.\");\n }\n return { definitions: extractDefinitions(parsed) };\n}\n\nfunction extractDefinitions(parsed: unknown): ItemTypeDefinition[] {\n const candidate = selectDefinitionsArray(parsed);\n if (!candidate) {\n return [];\n }\n const definitions: ItemTypeDefinition[] = [];\n for (const entry of candidate) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const record = entry as Record<string, unknown>;\n if (typeof record.name !== \"string\" || record.name.trim().length === 0) {\n continue;\n }\n definitions.push(record as unknown as ItemTypeDefinition);\n }\n return definitions;\n}\n\nfunction selectDefinitionsArray(parsed: unknown): unknown[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed;\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.definitions)) {\n return record.definitions;\n }\n if (typeof record.item_types === \"object\" && record.item_types !== null) {\n const nested = record.item_types as Record<string, unknown>;\n if (Array.isArray(nested.definitions)) {\n return nested.definitions;\n }\n }\n return undefined;\n}\n\n/**\n * Idempotent UPSERT of a custom item type into the parsed file. Matching is\n * case-insensitive by name. When a definition already exists, fields supplied\n * in `input` override the previous values; aliases are merged (deduped); other\n * fields not addressed by add-type flags are preserved untouched.\n */\nexport function upsertItemType(file: ItemTypesFile, input: NormalizedAddTypeInput): UpsertItemTypeResult {\n const lowerName = input.name.toLowerCase();\n const definitions = file.definitions.slice();\n const existingIndex = definitions.findIndex(\n (definition) => typeof definition.name === \"string\" && definition.name.trim().toLowerCase() === lowerName,\n );\n const existing = existingIndex >= 0 ? definitions[existingIndex] : undefined;\n\n const mergedAliases = dedupeAliases([...coerceAliasArray(existing?.aliases), ...input.aliases]);\n\n const next: ItemTypeDefinition = {\n ...(existing ?? {}),\n name: input.name,\n };\n if (input.folder !== undefined) {\n next.folder = input.folder;\n }\n if (mergedAliases.length > 0) {\n next.aliases = mergedAliases;\n } else if (next.aliases !== undefined) {\n delete next.aliases;\n }\n applyAttribute(next, \"description\", input.description);\n applyAttribute(next, \"default_status\", input.defaultStatus);\n\n if (existingIndex >= 0) {\n definitions[existingIndex] = next;\n } else {\n definitions.push(next);\n }\n definitions.sort((left, right) => left.name.localeCompare(right.name));\n\n return {\n file: { definitions },\n definition: next,\n replaced: existingIndex >= 0,\n ...(existing && typeof existing.name === \"string\" ? { previousName: existing.name } : {}),\n };\n}\n\n/**\n * Removes a custom item type definition from the parsed file by name\n * (case-insensitive). Throws a plain Error when `name` is empty or collides\n * with a reserved built-in type (built-ins are not stored in the file and must\n * never be deletable). Returns `removed: false` when no matching custom\n * definition exists so the CLI layer can treat the call as an idempotent no-op.\n */\nexport function removeItemType(file: ItemTypesFile, name: string | undefined): RemoveItemTypeResult {\n const trimmed = (name ?? \"\").trim();\n if (trimmed.length === 0) {\n throw new Error(\"Type name must not be empty.\");\n }\n const builtinMatch = matchBuiltinTypeName(trimmed);\n if (builtinMatch) {\n throw new Error(\n `Cannot remove built-in item type \"${builtinMatch}\". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(\", \")}.`,\n );\n }\n const lowerName = trimmed.toLowerCase();\n const definitions = file.definitions.slice();\n const existingIndex = definitions.findIndex(\n (definition) => typeof definition.name === \"string\" && definition.name.trim().toLowerCase() === lowerName,\n );\n if (existingIndex < 0) {\n return { file: { definitions }, removed: false };\n }\n const [definition] = definitions.splice(existingIndex, 1);\n return { file: { definitions }, removed: true, definition };\n}\n\nfunction applyAttribute(definition: ItemTypeDefinition, key: string, value: string | undefined): void {\n const record = definition as unknown as Record<string, unknown>;\n if (value !== undefined) {\n record[key] = value;\n }\n}\n\n/**\n * Serializes the item types file with a trailing newline (matches the rest of\n * the schema scaffold files written by pm).\n */\nexport function serializeItemTypesFile(file: ItemTypesFile): string {\n return `${JSON.stringify({ definitions: file.definitions }, null, 2)}\\n`;\n}\n\n/**\n * Appends a discoverable hint to the \"Invalid type\" error so agents learn that\n * custom types exist and how to register one. Quotes are chosen so the printed\n * line is copy-pasteable as a shell command.\n */\nexport function buildInvalidTypeHint(name: string, typesFilePath?: string): string {\n const safeName = name.trim().length > 0 ? name.trim() : name;\n const target = typesFilePath?.trim() || \".agents/pm/schema/types.json\";\n return `To register a custom type, run: pm schema add-type \"${escapeForDoubleQuotes(safeName)}\" (writes ${target}).`;\n}\n\n/**\n * Builds the full invalid-type error message used by create/update: the\n * existing \"Invalid type ... Allowed: ...\" line plus the discoverable hint.\n * `typesFilePath` should be the resolved schema/types.json path for the active\n * tracker (see {@link resolveItemTypesFilePath}) so the hint reflects a custom\n * `--pm-path` instead of the hardcoded `.agents/pm` default.\n */\nexport function buildInvalidTypeError(name: string, allowedTypes: readonly string[], typesFilePath?: string): string {\n return `Invalid type value \"${name}\". Allowed: ${allowedTypes.join(\", \")}. ${buildInvalidTypeHint(name, typesFilePath)}`;\n}\n"],"names":["definition"],"mappings":"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","debugId":"7af73b5c-b50d-50c9-95e7-c6ed4caefbeb"}
@@ -1,20 +1,24 @@
1
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]="4142e7c6-57b9-534b-8af8-0398662732fe")}catch(e){}}();
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]="56e7efe0-e981-5428-a2f7-b8bcad5b5868")}catch(e){}}();
3
+ import {
4
+ TYPE_PRESET_NAMES,
5
+ normalizeTypePresetName,
6
+ resolveTypePresetDefinitions
7
+ } from "./chunk-4RTLBTYS.js";
3
8
  import {
4
- normalizeAddTypeInput,
5
9
  parseItemTypesFile,
6
10
  serializeItemTypesFile,
7
11
  upsertItemType
8
- } from "./chunk-TSXWFN3L.js";
12
+ } from "./chunk-6VFUEGOA.js";
9
13
  import {
10
14
  runExtension
11
- } from "./chunk-SOHXUA2Q.js";
15
+ } from "./chunk-VHG6LUKR.js";
12
16
  import {
13
17
  normalizePrefix
14
- } from "./chunk-6ZFTM65G.js";
18
+ } from "./chunk-F5MSD5HE.js";
15
19
  import {
16
20
  resolveItemTypeRegistry
17
- } from "./chunk-32XSW44C.js";
21
+ } from "./chunk-V2GYOMEX.js";
18
22
  import {
19
23
  DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,
20
24
  EXIT_CODE,
@@ -33,7 +37,7 @@ import {
33
37
  runActiveOnWriteHooks,
34
38
  writeFileAtomic,
35
39
  writeSettings
36
- } from "./chunk-S2CDTRJ6.js";
40
+ } from "./chunk-SJCMTOEU.js";
37
41
 
38
42
  // dist/cli/commands/init.js
39
43
  import fs2 from "node:fs/promises";
@@ -66,6 +70,7 @@ var AGENT_GUIDANCE_TEMPLATE_VERSION = 1;
66
70
  var AGENT_GUIDANCE_START_MARKER_PREFIX = "<!-- pm-cli:agent-guidance:start:";
67
71
  var AGENT_GUIDANCE_START_MARKER = `<!-- pm-cli:agent-guidance:start:v${AGENT_GUIDANCE_TEMPLATE_VERSION} -->`;
68
72
  var AGENT_GUIDANCE_END_MARKER = "<!-- pm-cli:agent-guidance:end -->";
73
+ var createAgentGuidanceReadlineInterface = () => readline.createInterface({ input, output });
69
74
  function toPortableRelativePath(projectRoot, targetPath) {
70
75
  const relative = path.relative(projectRoot, targetPath);
71
76
  if (relative.length === 0) {
@@ -118,7 +123,9 @@ function upsertAgentGuidanceBlock(existingContent) {
118
123
  const nextBlock = buildAgentGuidanceBlock(lineEnding);
119
124
  const existingRange = findGuidanceBlockRange(existingContent);
120
125
  if (existingRange) {
121
- const nextContent2 = ensureTrailingNewline(`${existingContent.slice(0, existingRange.start_index)}${nextBlock}${existingContent.slice(existingRange.end_index)}`);
126
+ const trailingContent = existingContent.slice(existingRange.end_index);
127
+ const normalizedTrailingContent = trailingContent.startsWith("\r\n") ? trailingContent.slice(2) : trailingContent.startsWith("\n") ? trailingContent.slice(1) : trailingContent;
128
+ const nextContent2 = ensureTrailingNewline(`${existingContent.slice(0, existingRange.start_index)}${nextBlock}${normalizedTrailingContent}`);
122
129
  return {
123
130
  next_content: nextContent2,
124
131
  changed: nextContent2 !== existingContent
@@ -163,7 +170,7 @@ function parsePromptChoice(answer, currentDefault) {
163
170
  return currentDefault;
164
171
  }
165
172
  async function promptForGuidanceWrite(targetRelativePath) {
166
- const rl = readline.createInterface({ input, output });
173
+ const rl = createAgentGuidanceReadlineInterface();
167
174
  try {
168
175
  output.write("\nAgent guidance check\n");
169
176
  output.write("No AGENTS.md/CLAUDE.md file currently contains compact pm workflow guidance.\n");
@@ -381,61 +388,28 @@ function summarizeInitResult(result) {
381
388
  hint: "Re-run with --verbose for the full settings tree."
382
389
  };
383
390
  }
391
+ var _testOnly = {
392
+ normalizeInitGovernancePreset,
393
+ normalizeInitTypePreset,
394
+ normalizeOptionalInitAuthor,
395
+ normalizeInitAgentGuidanceMode,
396
+ parseYesNoChoice,
397
+ applyGovernancePreset,
398
+ runInitWizard,
399
+ setInitReadlineFactoryForTests,
400
+ summarizeInstalledPackages,
401
+ registerInitTypePreset,
402
+ assertExplicitTrackerPathIsNotWorkspaceRoot,
403
+ isLikelyWorkspaceRoot
404
+ };
405
+ var createInitReadlineInterface = () => readline2.createInterface({ input: input2, output: output2 });
406
+ function setInitReadlineFactoryForTests(factory) {
407
+ createInitReadlineInterface = factory ?? (() => readline2.createInterface({ input: input2, output: output2 }));
408
+ }
384
409
  function cloneDefaults() {
385
410
  return structuredClone(SETTINGS_DEFAULTS);
386
411
  }
387
412
  var BUILTIN_GOVERNANCE_PRESETS = ["minimal", "default", "strict"];
388
- var INIT_TYPE_PRESET_NAMES = ["agile", "ops", "research"];
389
- var INIT_TYPE_PRESET_DEFINITIONS = {
390
- agile: [
391
- {
392
- name: "Story",
393
- description: "User-facing outcome or capability slice expressed from a stakeholder perspective.",
394
- defaultStatus: "open",
395
- folder: "stories",
396
- aliases: ["user-story"]
397
- },
398
- {
399
- name: "Spike",
400
- description: "Time-boxed investigation used to reduce uncertainty before implementation.",
401
- defaultStatus: "open",
402
- folder: "spikes",
403
- aliases: ["research-spike"]
404
- }
405
- ],
406
- ops: [
407
- {
408
- name: "Incident",
409
- description: "Operational disruption, degradation, or support escalation with recovery tracking.",
410
- defaultStatus: "open",
411
- folder: "incidents",
412
- aliases: ["outage"]
413
- },
414
- {
415
- name: "Runbook",
416
- description: "Repeatable operational procedure, diagnostic path, or response playbook.",
417
- defaultStatus: "open",
418
- folder: "runbooks",
419
- aliases: ["playbook"]
420
- }
421
- ],
422
- research: [
423
- {
424
- name: "Experiment",
425
- description: "Validated-learning activity with hypothesis, method, and outcome tracking.",
426
- defaultStatus: "open",
427
- folder: "experiments",
428
- aliases: ["study"]
429
- },
430
- {
431
- name: "Hypothesis",
432
- description: "Testable claim or assumption that should be supported, rejected, or refined.",
433
- defaultStatus: "open",
434
- folder: "hypotheses",
435
- aliases: ["assumption"]
436
- }
437
- ]
438
- };
439
413
  function normalizeInitGovernancePreset(rawValue) {
440
414
  if (rawValue === void 0) {
441
415
  return void 0;
@@ -456,14 +430,14 @@ function normalizeInitTypePreset(rawValue) {
456
430
  if (rawValue === void 0) {
457
431
  return void 0;
458
432
  }
459
- const normalized = rawValue.trim().toLowerCase().replaceAll("-", "_");
460
- if (normalized.length === 0) {
433
+ if (rawValue.trim().length === 0) {
461
434
  throw new PmCliError("--type-preset must not be empty", EXIT_CODE.USAGE);
462
435
  }
463
- if (normalized === "agile" || normalized === "ops" || normalized === "research") {
464
- return normalized;
436
+ try {
437
+ return normalizeTypePresetName(rawValue);
438
+ } catch {
439
+ throw new PmCliError(`Invalid --type-preset value "${rawValue}". Allowed: ${TYPE_PRESET_NAMES.join(", ")}`, EXIT_CODE.USAGE);
465
440
  }
466
- throw new PmCliError(`Invalid --type-preset value "${rawValue}". Allowed: ${INIT_TYPE_PRESET_NAMES.join(", ")}`, EXIT_CODE.USAGE);
467
441
  }
468
442
  function normalizeOptionalInitAuthor(rawValue) {
469
443
  if (rawValue === void 0) {
@@ -510,12 +484,15 @@ function applyGovernancePreset(settings, preset) {
510
484
  settings.validation.parent_reference = knobs.parent_reference;
511
485
  settings.validation.metadata_profile = knobs.metadata_profile;
512
486
  }
487
+ function isInstalledPackageEntry(value) {
488
+ return typeof value === "object" && value !== null && !Array.isArray(value);
489
+ }
513
490
  function summarizeInstalledPackages(result) {
514
491
  const details = result.details;
515
492
  return {
516
493
  installed_all: details.installed_all === true,
517
494
  installed_count: typeof details.installed_count === "number" ? details.installed_count : 0,
518
- packages: Array.isArray(details.packages) ? details.packages.map((entry) => ({
495
+ packages: Array.isArray(details.packages) ? details.packages.filter(isInstalledPackageEntry).map((entry) => ({
519
496
  alias: typeof entry.alias === "string" ? entry.alias : "",
520
497
  ok: entry.ok === true
521
498
  })) : []
@@ -528,8 +505,7 @@ async function registerInitTypePreset(pmRoot, settings, preset) {
528
505
  let nextFile = parsed;
529
506
  const registered = [];
530
507
  const updated = [];
531
- for (const rawDefinition of INIT_TYPE_PRESET_DEFINITIONS[preset]) {
532
- const normalized = normalizeAddTypeInput(rawDefinition);
508
+ for (const normalized of resolveTypePresetDefinitions(preset)) {
533
509
  const upsert = upsertItemType(nextFile, normalized);
534
510
  nextFile = upsert.file;
535
511
  (upsert.replaced ? updated : registered).push(upsert.definition.name);
@@ -588,7 +564,7 @@ async function assertExplicitTrackerPathIsNotWorkspaceRoot(pmRoot, global, force
588
564
  });
589
565
  }
590
566
  async function runInitWizard(initialPrefix, telemetryDefault) {
591
- const rl = readline2.createInterface({ input: input2, output: output2 });
567
+ const rl = createInitReadlineInterface();
592
568
  try {
593
569
  output2.write("pm init setup wizard (agent-optimized)\n");
594
570
  output2.write("This walkthrough is non-destructive and each choice can be changed later with pm config.\n\n");
@@ -601,7 +577,14 @@ async function runInitWizard(initialPrefix, telemetryDefault) {
601
577
  output2.write("default: ownership conflict warnings, progressive create defaults, close validation warn.\n");
602
578
  output2.write("strict: ownership blocking, strict create defaults, close validation strict.\n");
603
579
  const presetAnswer = await rl.question("Governance preset [minimal/default/strict] (default: minimal): ");
604
- const resolvedPreset = normalizeInitGovernancePreset(presetAnswer.trim().length > 0 ? presetAnswer : "minimal") ?? "minimal";
580
+ const presetChoice = presetAnswer.trim().length > 0 ? presetAnswer.trim() : "minimal";
581
+ let resolvedPreset = "minimal";
582
+ try {
583
+ resolvedPreset = normalizeInitGovernancePreset(presetChoice);
584
+ } catch {
585
+ output2.write(`Unrecognized governance preset "${presetChoice}"; using minimal.
586
+ `);
587
+ }
605
588
  output2.write("\n3/3 Project telemetry\n");
606
589
  output2.write("Telemetry helps improve reliability and can be disabled anytime via pm config.\n");
607
590
  const telemetryLabel = telemetryDefault ? "Y/n" : "y/N";
@@ -790,8 +773,9 @@ async function runInit(prefixArg, global, options = {}) {
790
773
 
791
774
  export {
792
775
  summarizeInitResult,
776
+ _testOnly,
793
777
  runInit
794
778
  };
795
- //# sourceMappingURL=chunk-2J2AH4V5.js.map
779
+ //# sourceMappingURL=chunk-AAOXSPAE.js.map
796
780
 
797
- //# debugId=4142e7c6-57b9-534b-8af8-0398662732fe
781
+ //# debugId=56e7efe0-e981-5428-a2f7-b8bcad5b5868
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../cli/commands/init.ts","../../../../../../../../cli/commands/init-agent-guidance.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport { getActiveExtensionRegistrations, runActiveOnWriteHooks } from \"../../core/extensions/index.js\";\nimport { pathExists, readFileIfExists, writeFileAtomic } from \"../../core/fs/fs-utils.js\";\nimport { normalizePrefix } from \"../../core/item/id.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport {\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,\n ensureRuntimeSchemaFileScaffold,\n filePathForSchemaSection,\n normalizeRuntimeSchemaSettings,\n} from \"../../core/schema/runtime-schema.js\";\nimport {\n parseItemTypesFile,\n serializeItemTypesFile,\n upsertItemType,\n} from \"../../core/schema/item-types-file.js\";\nimport {\n normalizeTypePresetName,\n resolveTypePresetDefinitions,\n TYPE_PRESET_NAMES,\n type TypePresetName,\n} from \"../../core/schema/type-presets.js\";\nimport { EXIT_CODE, GOVERNANCE_PRESET_DEFAULTS, PM_REQUIRED_SUBDIRS, SETTINGS_DEFAULTS } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings, writeSettings } from \"../../core/store/settings.js\";\nimport type { GovernancePreset, PmSettings } from \"../../types/index.js\";\nimport { runExtension, type ExtensionCommandResult } from \"./extension.js\";\nimport {\n INIT_AGENT_GUIDANCE_MODE_VALUES,\n runInitAgentGuidance,\n type InitAgentGuidanceMode,\n type InitAgentGuidanceSummary,\n} from \"./init-agent-guidance.js\";\n\nexport interface InitInstalledPackagesSummary {\n installed_all: boolean;\n installed_count: number;\n packages: Array<{\n alias: string;\n ok: boolean;\n }>;\n}\n\nexport type InitTypePresetName = TypePresetName;\n\nexport interface InitRegisteredTypePresetSummary {\n name: InitTypePresetName;\n registered: string[];\n updated: string[];\n file: string;\n}\n\nexport interface InitResult {\n ok: boolean;\n path: string;\n settings: PmSettings;\n created_dirs: string[];\n warnings: string[];\n governance_preset: GovernancePreset;\n wizard_used: boolean;\n registered_type_preset?: InitRegisteredTypePresetSummary;\n installed_packages?: InitInstalledPackagesSummary;\n next_steps: string[];\n agent_guidance: InitAgentGuidanceSummary;\n}\n\nexport interface InitCommandOptions {\n preset?: string;\n defaults?: boolean;\n author?: string;\n withPackages?: boolean;\n agentGuidance?: string;\n typePreset?: string;\n force?: boolean;\n}\n\n/**\n * Concise projection of an InitResult for the default (toon) renderer. It keeps\n * every piece of information that only init can surface — the resolved path, id\n * prefix, governance preset, telemetry capture level, created-directory count,\n * the full warnings list (including `already_exists:` markers), agent-guidance\n * summary, and next steps — but replaces the verbose full settings tree (~190\n * lines) with a compact `settings` summary. Use --verbose for the full tree.\n */\nexport interface InitConciseResult {\n ok: boolean;\n path: string;\n id_prefix: string;\n governance_preset: GovernancePreset;\n telemetry: {\n enabled: boolean;\n capture_level: string;\n };\n output_format: string;\n created_dirs_count: number;\n created_dirs: string[];\n warnings: string[];\n wizard_used: boolean;\n registered_type_preset?: InitRegisteredTypePresetSummary;\n installed_packages?: InitInstalledPackagesSummary;\n next_steps: string[];\n agent_guidance: InitAgentGuidanceSummary;\n hint: string;\n}\n\nexport function summarizeInitResult(result: InitResult): InitConciseResult {\n return {\n ok: result.ok,\n path: result.path,\n id_prefix: result.settings.id_prefix,\n governance_preset: result.governance_preset,\n telemetry: {\n enabled: result.settings.telemetry.enabled,\n capture_level: result.settings.telemetry.capture_level,\n },\n output_format: result.settings.output.default_format,\n created_dirs_count: result.created_dirs.length,\n created_dirs: result.created_dirs,\n warnings: result.warnings,\n wizard_used: result.wizard_used,\n ...(result.registered_type_preset ? { registered_type_preset: result.registered_type_preset } : {}),\n ...(result.installed_packages ? { installed_packages: result.installed_packages } : {}),\n next_steps: result.next_steps,\n agent_guidance: result.agent_guidance,\n hint: \"Re-run with --verbose for the full settings tree.\",\n };\n}\n\nexport const _testOnly = {\n normalizeInitGovernancePreset,\n normalizeInitTypePreset,\n normalizeOptionalInitAuthor,\n normalizeInitAgentGuidanceMode,\n parseYesNoChoice,\n applyGovernancePreset,\n runInitWizard,\n setInitReadlineFactoryForTests,\n summarizeInstalledPackages,\n registerInitTypePreset,\n assertExplicitTrackerPathIsNotWorkspaceRoot,\n isLikelyWorkspaceRoot,\n};\n\ntype InitReadlineInterface = ReturnType<typeof readline.createInterface>;\nlet createInitReadlineInterface = (): InitReadlineInterface => readline.createInterface({ input, output });\n\nfunction setInitReadlineFactoryForTests(factory: (() => InitReadlineInterface) | undefined): void {\n createInitReadlineInterface = factory ?? (() => readline.createInterface({ input, output }));\n}\n\nfunction cloneDefaults(): PmSettings {\n return structuredClone(SETTINGS_DEFAULTS);\n}\n\ntype BuiltinGovernancePreset = Exclude<GovernancePreset, \"custom\">;\nconst BUILTIN_GOVERNANCE_PRESETS: BuiltinGovernancePreset[] = [\"minimal\", \"default\", \"strict\"];\nfunction normalizeInitGovernancePreset(rawValue: string | undefined): BuiltinGovernancePreset | undefined {\n if (rawValue === undefined) {\n return undefined;\n }\n const normalized = rawValue.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized.length === 0) {\n throw new PmCliError(\"--preset must not be empty\", EXIT_CODE.USAGE);\n }\n if (normalized === \"minimal\" || normalized === \"default\" || normalized === \"strict\") {\n return normalized;\n }\n if (normalized === \"lite\" || normalized === \"minimum\") {\n return \"minimal\";\n }\n throw new PmCliError(\n `Invalid --preset value \"${rawValue}\". Allowed: ${BUILTIN_GOVERNANCE_PRESETS.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeInitTypePreset(rawValue: string | undefined): InitTypePresetName | undefined {\n if (rawValue === undefined) {\n return undefined;\n }\n if (rawValue.trim().length === 0) {\n throw new PmCliError(\"--type-preset must not be empty\", EXIT_CODE.USAGE);\n }\n try {\n // Non-undefined input never returns undefined; the shared normalizer throws\n // a plain Error for empty/unknown values, which we re-map to init's --type-preset\n // PmCliError wording for a consistent CLI surface.\n return normalizeTypePresetName(rawValue) as InitTypePresetName;\n } catch {\n throw new PmCliError(\n `Invalid --type-preset value \"${rawValue}\". Allowed: ${TYPE_PRESET_NAMES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction normalizeOptionalInitAuthor(rawValue: string | undefined): string | undefined {\n if (rawValue === undefined) {\n return undefined;\n }\n const normalized = rawValue.trim();\n if (normalized.length === 0) {\n throw new PmCliError(\"--author must not be empty\", EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction normalizeInitAgentGuidanceMode(rawValue: string | undefined): InitAgentGuidanceMode {\n if (rawValue === undefined) {\n return \"ask\";\n }\n const normalized = rawValue.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized.length === 0) {\n throw new PmCliError(\"--agent-guidance must not be empty\", EXIT_CODE.USAGE);\n }\n if (normalized === \"ask\" || normalized === \"add\" || normalized === \"skip\" || normalized === \"status\") {\n return normalized;\n }\n throw new PmCliError(\n `Invalid --agent-guidance value \"${rawValue}\". Allowed: ${INIT_AGENT_GUIDANCE_MODE_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction parseYesNoChoice(answer: string, currentDefault: boolean): boolean {\n const normalized = answer.trim().toLowerCase();\n if (normalized.length === 0) {\n return currentDefault;\n }\n if (normalized === \"y\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"n\" || normalized === \"no\") {\n return false;\n }\n return currentDefault;\n}\n\nfunction applyGovernancePreset(settings: PmSettings, preset: BuiltinGovernancePreset): void {\n const knobs = GOVERNANCE_PRESET_DEFAULTS[preset];\n settings.governance = {\n preset,\n ...knobs,\n };\n settings.validation.parent_reference = knobs.parent_reference;\n settings.validation.metadata_profile = knobs.metadata_profile;\n}\n\nfunction isInstalledPackageEntry(value: unknown): value is { alias?: unknown; ok?: unknown } {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction summarizeInstalledPackages(result: ExtensionCommandResult): InitInstalledPackagesSummary {\n const details = result.details as {\n installed_all?: unknown;\n installed_count?: unknown;\n packages?: Array<{\n alias?: unknown;\n ok?: unknown;\n }>;\n };\n return {\n installed_all: details.installed_all === true,\n installed_count: typeof details.installed_count === \"number\" ? details.installed_count : 0,\n packages: Array.isArray(details.packages)\n ? details.packages.filter(isInstalledPackageEntry).map((entry) => ({\n alias: typeof entry.alias === \"string\" ? entry.alias : \"\",\n ok: entry.ok === true,\n }))\n : [],\n };\n}\n\nasync function registerInitTypePreset(\n pmRoot: string,\n settings: PmSettings,\n preset: InitTypePresetName,\n): Promise<InitRegisteredTypePresetSummary> {\n const schema = normalizeRuntimeSchemaSettings(settings.schema);\n const typesPath = filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n const parsed = parseItemTypesFile(await readFileIfExists(typesPath));\n let nextFile = parsed;\n const registered: string[] = [];\n const updated: string[] = [];\n for (const normalized of resolveTypePresetDefinitions(preset)) {\n const upsert = upsertItemType(nextFile, normalized);\n nextFile = upsert.file;\n (upsert.replaced ? updated : registered).push(upsert.definition.name);\n }\n await writeFileAtomic(typesPath, serializeItemTypesFile(nextFile));\n return {\n name: preset,\n registered,\n updated,\n file: typesPath,\n };\n}\n\nasync function isLikelyWorkspaceRoot(candidate: string): Promise<boolean> {\n const indicators = [\n \".git\",\n \"package.json\",\n \"pnpm-workspace.yaml\",\n \"AGENTS.md\",\n path.join(\".agents\", \"pm\"),\n ];\n for (const indicator of indicators) {\n if (await pathExists(path.join(candidate, indicator))) {\n return true;\n }\n }\n return false;\n}\n\nasync function assertExplicitTrackerPathIsNotWorkspaceRoot(pmRoot: string, global: GlobalOptions, force: boolean): Promise<void> {\n if (global.path === undefined || force) {\n return;\n }\n if (await pathExists(path.join(pmRoot, \"settings.json\"))) {\n return;\n }\n if (!(await isLikelyWorkspaceRoot(pmRoot))) {\n return;\n }\n const nestedTracker = path.join(pmRoot, \".agents\", \"pm\");\n throw new PmCliError(\n `Refusing to initialize tracker files directly in workspace root \"${pmRoot}\".`,\n EXIT_CODE.USAGE,\n {\n code: \"workspace_root_pm_path\",\n type: \"urn:pm-cli:error:workspace_root_pm_path\",\n why: \"--pm-path/--path points at the tracker storage directory itself, not the repository workspace. Point it at .agents/pm or pass --force if you intentionally want root-level tracker files.\",\n examples: [\n `pm --pm-path ${nestedTracker} init --yes`,\n \"pm init --yes\",\n `pm --pm-path ${pmRoot} init --yes --force`,\n ],\n nextSteps: [\n \"Use --pm-path <repo>/.agents/pm for repository-local tracker storage.\",\n \"Use PM_PATH only for sandboxed tests or explicit tracker roots.\",\n \"Pass --force only when root-level tracker files are intentional.\",\n ],\n recovery: {\n next_best_command: `pm --pm-path ${nestedTracker} init --yes`,\n },\n },\n );\n}\n\nasync function runInitWizard(initialPrefix: string, telemetryDefault: boolean): Promise<{\n prefix: string;\n preset: BuiltinGovernancePreset;\n telemetry_enabled: boolean;\n}> {\n const rl = createInitReadlineInterface();\n try {\n output.write(\"pm init setup wizard (agent-optimized)\\n\");\n output.write(\"This walkthrough is non-destructive and each choice can be changed later with pm config.\\n\\n\");\n\n output.write(\"1/3 Item ID prefix\\n\");\n output.write(\"Prefix is prepended to generated IDs (for example pm-a1b2).\\n\");\n const prefixAnswer = await rl.question(`Item ID prefix [${initialPrefix}]: `);\n const resolvedPrefix = prefixAnswer.trim().length > 0 ? normalizePrefix(prefixAnswer) : initialPrefix;\n\n output.write(\"\\n2/3 Governance preset\\n\");\n output.write(\"minimal: no ownership blocking, progressive create defaults, close validation off.\\n\");\n output.write(\"default: ownership conflict warnings, progressive create defaults, close validation warn.\\n\");\n output.write(\"strict: ownership blocking, strict create defaults, close validation strict.\\n\");\n const presetAnswer = await rl.question(\"Governance preset [minimal/default/strict] (default: minimal): \");\n const presetChoice = presetAnswer.trim().length > 0 ? presetAnswer.trim() : \"minimal\";\n // The wizard is forgiving: a typo'd/unknown preset defaults to minimal with a\n // notice instead of throwing and aborting an in-progress interactive setup.\n // normalizeInitGovernancePreset returns a concrete preset for valid input and\n // throws (never returns undefined) for invalid non-empty input, so the result is\n // always a BuiltinGovernancePreset on the success path.\n let resolvedPreset: BuiltinGovernancePreset = \"minimal\";\n try {\n resolvedPreset = normalizeInitGovernancePreset(presetChoice) as BuiltinGovernancePreset;\n } catch {\n output.write(`Unrecognized governance preset \"${presetChoice}\"; using minimal.\\n`);\n }\n\n output.write(\"\\n3/3 Project telemetry\\n\");\n output.write(\"Telemetry helps improve reliability and can be disabled anytime via pm config.\\n\");\n const telemetryLabel = telemetryDefault ? \"Y/n\" : \"y/N\";\n const telemetryAnswer = await rl.question(`Enable telemetry for this project? [${telemetryLabel}] `);\n const telemetryEnabled = parseYesNoChoice(telemetryAnswer, telemetryDefault);\n\n output.write(\"\\n\");\n return {\n prefix: resolvedPrefix,\n preset: resolvedPreset,\n telemetry_enabled: telemetryEnabled,\n };\n } finally {\n rl.close();\n }\n}\n\nexport async function runInit(\n prefixArg: string | undefined,\n global: GlobalOptions,\n options: InitCommandOptions = {},\n): Promise<InitResult> {\n const cwd = process.cwd();\n const pmRoot = resolvePmRoot(cwd, global.path);\n await assertExplicitTrackerPathIsNotWorkspaceRoot(pmRoot, global, options.force === true);\n const createdDirs: string[] = [];\n const warnings: string[] = [];\n let wizardUsed = false;\n\n for (const subdir of PM_REQUIRED_SUBDIRS) {\n const target = subdir ? path.join(pmRoot, subdir) : pmRoot;\n const existed = await pathExists(target);\n await fs.mkdir(target, { recursive: true });\n if (existed) {\n warnings.push(`already_exists:${target}`);\n } else {\n createdDirs.push(target);\n }\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: target,\n scope: \"project\",\n op: \"init:ensure_dir\",\n })),\n );\n }\n\n const settingsPath = path.join(pmRoot, \"settings.json\");\n const settingsExists = await pathExists(settingsPath);\n let normalizedPrefix = normalizePrefix(prefixArg);\n const presetFromOption = normalizeInitGovernancePreset(options.preset);\n const useDefaults = options.defaults === true;\n const authorFromOption = normalizeOptionalInitAuthor(options.author);\n const installBundledPackages = options.withPackages === true;\n const agentGuidanceMode = normalizeInitAgentGuidanceMode(options.agentGuidance);\n const typePreset = normalizeInitTypePreset(options.typePreset);\n let chosenPreset = presetFromOption;\n let chosenTelemetryEnabled: boolean | undefined;\n\n let settings: PmSettings;\n if (settingsExists) {\n settings = await readSettings(pmRoot);\n warnings.push(`already_exists:${settingsPath}`);\n let changed = false;\n if (prefixArg !== undefined && settings.id_prefix !== normalizedPrefix) {\n settings.id_prefix = normalizedPrefix;\n warnings.push(`updated:id_prefix:${normalizedPrefix}`);\n changed = true;\n }\n if (presetFromOption !== undefined && settings.governance.preset !== presetFromOption) {\n applyGovernancePreset(settings, presetFromOption);\n warnings.push(`updated:governance_preset:${presetFromOption}`);\n changed = true;\n }\n if (authorFromOption !== undefined && settings.author_default !== authorFromOption) {\n settings.author_default = authorFromOption;\n warnings.push(`updated:author_default:${authorFromOption}`);\n changed = true;\n }\n if (changed) {\n await writeSettings(pmRoot, settings);\n }\n } else {\n if (presetFromOption === undefined && !useDefaults && process.stdin.isTTY === true && process.stdout.isTTY === true) {\n const wizardChoices = await runInitWizard(normalizedPrefix, SETTINGS_DEFAULTS.telemetry.enabled);\n normalizedPrefix = wizardChoices.prefix;\n chosenPreset = wizardChoices.preset;\n chosenTelemetryEnabled = wizardChoices.telemetry_enabled;\n wizardUsed = true;\n }\n const effectivePreset = chosenPreset ?? \"minimal\";\n settings = cloneDefaults();\n settings.id_prefix = normalizedPrefix;\n applyGovernancePreset(settings, effectivePreset);\n if (authorFromOption !== undefined) {\n settings.author_default = authorFromOption;\n }\n if (chosenTelemetryEnabled !== undefined) {\n settings.telemetry.enabled = chosenTelemetryEnabled;\n settings.telemetry.first_run_prompt_completed = true;\n }\n await writeSettings(pmRoot, settings);\n }\n\n const agentGuidanceResult = await runInitAgentGuidance({\n pm_root: pmRoot,\n cwd,\n mode: agentGuidanceMode,\n interactive: process.stdin.isTTY === true && process.stdout.isTTY === true,\n settings,\n });\n warnings.push(...agentGuidanceResult.warnings);\n if (agentGuidanceResult.settings_changed) {\n await writeSettings(pmRoot, settings);\n }\n\n const runtimeSchemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, settings.schema);\n for (const createdPath of runtimeSchemaScaffold.created_paths) {\n createdDirs.push(createdPath);\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: createdPath,\n scope: \"project\",\n op: \"init:runtime_schema_file\",\n })),\n );\n }\n\n let registeredTypePreset: InitRegisteredTypePresetSummary | undefined;\n if (typePreset !== undefined) {\n registeredTypePreset = await registerInitTypePreset(pmRoot, settings, typePreset);\n warnings.push(`registered_type_preset:${typePreset}`);\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: registeredTypePreset.file,\n scope: \"project\",\n op: \"init:type_preset\",\n })),\n );\n settings = await readSettings(pmRoot);\n }\n\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n for (const typeFolder of typeRegistry.folders) {\n if ((PM_REQUIRED_SUBDIRS as readonly string[]).includes(typeFolder)) {\n continue;\n }\n const target = path.join(pmRoot, typeFolder);\n const existed = await pathExists(target);\n await fs.mkdir(target, { recursive: true });\n if (existed) {\n warnings.push(`already_exists:${target}`);\n } else {\n createdDirs.push(target);\n }\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: target,\n scope: \"project\",\n op: \"init:ensure_dir\",\n })),\n );\n }\n\n let installedPackages: InitInstalledPackagesSummary | undefined;\n if (installBundledPackages) {\n const packageInstallResult = await runExtension(\"all\", { install: true, project: true }, global);\n warnings.push(...packageInstallResult.warnings);\n installedPackages = summarizeInstalledPackages(packageInstallResult);\n if (!installedPackages.installed_all || installedPackages.packages.some((entry) => !entry.ok)) {\n throw new PmCliError(\"pm init --with-packages did not install all bundled packages successfully.\", EXIT_CODE.GENERIC_FAILURE);\n }\n }\n\n const nextSteps: string[] = [\n 'Create your first item: pm create --type Task --title \"<title>\"',\n 'List active items: pm list',\n 'Get agent-friendly project context: pm context',\n ];\n if (!installBundledPackages) {\n nextSteps.push(\n \"Add optional packages for richer workflows: pm install calendar --project, pm install templates --project, pm install guide-shell --project\",\n );\n nextSteps.push(\"Or install everything bundled: pm init --with-packages (idempotent on re-run)\");\n } else {\n nextSteps.push(\"Explore newly-available commands: pm cal, pm templates, pm guide\");\n }\n if (registeredTypePreset) {\n nextSteps.push(`Inspect registered preset types: pm schema list, pm schema show ${registeredTypePreset.registered[0] ?? registeredTypePreset.updated[0]}`);\n }\n nextSteps.push(\"Set PM_AUTHOR=<your-agent-id> so mutations attribute to the right caller.\");\n for (const guidanceNextStep of agentGuidanceResult.next_steps) {\n if (!nextSteps.includes(guidanceNextStep)) {\n nextSteps.push(guidanceNextStep);\n }\n }\n\n return {\n ok: true,\n path: pmRoot,\n settings,\n created_dirs: createdDirs,\n warnings,\n governance_preset: settings.governance.preset,\n wizard_used: wizardUsed,\n ...(registeredTypePreset ? { registered_type_preset: registeredTypePreset } : {}),\n ...(installedPackages ? { installed_packages: installedPackages } : {}),\n next_steps: nextSteps,\n agent_guidance: agentGuidanceResult.summary,\n };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport { runActiveOnWriteHooks } from \"../../core/extensions/index.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n\nexport type InitAgentGuidanceMode = \"ask\" | \"add\" | \"skip\" | \"status\";\n\nexport const INIT_AGENT_GUIDANCE_MODE_VALUES: InitAgentGuidanceMode[] = [\"ask\", \"add\", \"skip\", \"status\"];\n\nconst AGENT_GUIDANCE_TARGET_FILENAMES = [\"AGENTS.md\", \"CLAUDE.md\"] as const;\nconst AGENT_GUIDANCE_REQUIRED_TOKENS = [\n \"pm init\",\n \"pm context\",\n \"pm search\",\n \"pm create\",\n \"pm claim\",\n \"pm files\",\n \"pm docs\",\n \"pm test --run\",\n \"pm close\",\n \"pm release\",\n \"pm_author\",\n] as const;\nconst AGENT_GUIDANCE_REQUIRED_TOKEN_THRESHOLD = 8;\nconst AGENT_GUIDANCE_TEMPLATE_VERSION = 1;\nconst AGENT_GUIDANCE_START_MARKER_PREFIX = \"<!-- pm-cli:agent-guidance:start:\";\nconst AGENT_GUIDANCE_START_MARKER = `<!-- pm-cli:agent-guidance:start:v${AGENT_GUIDANCE_TEMPLATE_VERSION} -->`;\nconst AGENT_GUIDANCE_END_MARKER = \"<!-- pm-cli:agent-guidance:end -->\";\n\nexport const _testOnly = {\n toPortableRelativePath,\n ensureTrailingNewline,\n detectLineEnding,\n findGuidanceBlockRange,\n buildAgentGuidanceBlock,\n upsertAgentGuidanceBlock,\n resolveProjectRoot,\n resolveTargetGuidancePath,\n parsePromptChoice,\n pushUnique,\n promptForGuidanceWrite,\n normalizeAgentGuidanceState,\n applyAgentGuidanceState,\n writeGuidanceFile,\n setAgentGuidanceReadlineFactoryForTests,\n};\n\ntype AgentGuidanceReadlineInterface = ReturnType<typeof readline.createInterface>;\nlet createAgentGuidanceReadlineInterface = (): AgentGuidanceReadlineInterface => readline.createInterface({ input, output });\n\nfunction setAgentGuidanceReadlineFactoryForTests(factory: (() => AgentGuidanceReadlineInterface) | undefined): void {\n createAgentGuidanceReadlineInterface = factory ?? (() => readline.createInterface({ input, output }));\n}\n\ninterface AgentGuidanceFileScan {\n file_path: string;\n exists: boolean;\n has_guidance: boolean;\n has_marker: boolean;\n}\n\ninterface AgentGuidanceBlockRange {\n start_index: number;\n end_index: number;\n}\n\nexport interface InitAgentGuidanceSummary {\n mode: InitAgentGuidanceMode;\n present: boolean;\n prompted: boolean;\n applied: boolean;\n skipped: boolean;\n declined: boolean;\n prompt_completed: boolean;\n template_version: number;\n target_file: string;\n checked_files: string[];\n files_with_guidance: string[];\n missing_files: string[];\n}\n\nexport interface RunInitAgentGuidanceOptions {\n pm_root: string;\n cwd: string;\n mode: InitAgentGuidanceMode;\n interactive: boolean;\n settings: PmSettings;\n}\n\nexport interface RunInitAgentGuidanceResult {\n summary: InitAgentGuidanceSummary;\n warnings: string[];\n next_steps: string[];\n settings_changed: boolean;\n}\n\nfunction toPortableRelativePath(projectRoot: string, targetPath: string): string {\n const relative = path.relative(projectRoot, targetPath);\n if (relative.length === 0) {\n return path.basename(targetPath);\n }\n return relative.split(path.sep).join(\"/\");\n}\n\nfunction ensureTrailingNewline(value: string): string {\n return value.endsWith(\"\\n\") ? value : `${value}\\n`;\n}\n\nfunction detectLineEnding(value: string): \"\\n\" | \"\\r\\n\" {\n return value.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n}\n\nfunction findGuidanceBlockRange(content: string): AgentGuidanceBlockRange | null {\n const startIndex = content.indexOf(AGENT_GUIDANCE_START_MARKER_PREFIX);\n if (startIndex === -1) {\n return null;\n }\n const endMarkerIndex = content.indexOf(AGENT_GUIDANCE_END_MARKER, startIndex);\n if (endMarkerIndex === -1) {\n return null;\n }\n return {\n start_index: startIndex,\n end_index: endMarkerIndex + AGENT_GUIDANCE_END_MARKER.length,\n };\n}\n\nfunction hasGuidanceMarker(content: string): boolean {\n return findGuidanceBlockRange(content) !== null;\n}\n\nfunction buildAgentGuidanceBlock(lineEnding: \"\\n\" | \"\\r\\n\"): string {\n const lines = [\n AGENT_GUIDANCE_START_MARKER,\n \"## pm Workflow (Agent Quickstart)\",\n \"\",\n \"- Orient before mutate: `pm context --limit 10`, `pm search \\\"<keywords>\\\" --limit 10`, `pm list-open --limit 20`.\",\n \"- Claim and execute: `pm claim <id>` then `pm update <id> --status in_progress`.\",\n \"- Link evidence while coding: `pm files <id> --add ...`, `pm docs <id> --add ...`, `pm test <id> --add command=\\\"node scripts/run-tests.mjs test -- ...\\\"`.\",\n \"- Verify and close: `pm test <id> --run --progress`, `pm close <id> \\\"<evidence>\\\" --validate-close warn`, `pm release <id>`.\",\n \"- Set `PM_AUTHOR=<stable-agent-id>` before mutation commands.\",\n \"\",\n AGENT_GUIDANCE_END_MARKER,\n \"\",\n ];\n return lines.join(lineEnding);\n}\n\nfunction upsertAgentGuidanceBlock(existingContent: string): { next_content: string; changed: boolean } {\n const lineEnding = detectLineEnding(existingContent);\n const nextBlock = buildAgentGuidanceBlock(lineEnding);\n const existingRange = findGuidanceBlockRange(existingContent);\n if (existingRange) {\n const trailingContent = existingContent.slice(existingRange.end_index);\n const normalizedTrailingContent = trailingContent.startsWith(\"\\r\\n\")\n ? trailingContent.slice(2)\n : trailingContent.startsWith(\"\\n\")\n ? trailingContent.slice(1)\n : trailingContent;\n const nextContent = ensureTrailingNewline(\n `${existingContent.slice(0, existingRange.start_index)}${nextBlock}${normalizedTrailingContent}`,\n );\n return {\n next_content: nextContent,\n changed: nextContent !== existingContent,\n };\n }\n const separator = existingContent.length === 0 ? \"\" : existingContent.endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\";\n const nextContent = ensureTrailingNewline(`${existingContent}${separator}${nextBlock}`);\n return {\n next_content: nextContent,\n changed: nextContent !== existingContent,\n };\n}\n\nfunction resolveProjectRoot(pmRoot: string, cwd: string): string {\n const parent = path.dirname(pmRoot);\n if (path.basename(pmRoot) === \"pm\" && path.basename(parent) === \".agents\") {\n return path.dirname(parent);\n }\n return path.resolve(cwd, pmRoot);\n}\n\nfunction resolveTargetGuidancePath(scans: AgentGuidanceFileScan[], projectRoot: string): string {\n const existingAgents = scans.find((entry) => path.basename(entry.file_path) === \"AGENTS.md\" && entry.exists);\n if (existingAgents) {\n return existingAgents.file_path;\n }\n const existingAny = scans.find((entry) => entry.exists);\n if (existingAny) {\n return existingAny.file_path;\n }\n return path.join(projectRoot, \"AGENTS.md\");\n}\n\nfunction parsePromptChoice(answer: string, currentDefault: boolean): boolean {\n const normalized = answer.trim().toLowerCase();\n if (normalized.length === 0) {\n return currentDefault;\n }\n if (normalized === \"y\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"n\" || normalized === \"no\") {\n return false;\n }\n return currentDefault;\n}\n\nasync function promptForGuidanceWrite(targetRelativePath: string): Promise<boolean> {\n const rl = createAgentGuidanceReadlineInterface();\n try {\n output.write(\"\\nAgent guidance check\\n\");\n output.write(\"No AGENTS.md/CLAUDE.md file currently contains compact pm workflow guidance.\\n\");\n const answer = await rl.question(`Add a compact pm workflow section to ${targetRelativePath}? [Y/n] `);\n output.write(\"\\n\");\n return parsePromptChoice(answer, true);\n } finally {\n rl.close();\n }\n}\n\nfunction normalizeAgentGuidanceState(settings: PmSettings): PmSettings[\"agent_guidance\"] {\n const current = settings.agent_guidance;\n return {\n prompt_completed: current?.prompt_completed === true,\n declined: current?.declined === true,\n declined_at: typeof current?.declined_at === \"string\" ? current.declined_at : \"\",\n template_version:\n typeof current?.template_version === \"number\" && Number.isInteger(current.template_version) && current.template_version > 0\n ? current.template_version\n : AGENT_GUIDANCE_TEMPLATE_VERSION,\n last_checked_files: Array.isArray(current?.last_checked_files)\n ? [...new Set(current.last_checked_files.map((value) => value.trim()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n )\n : [],\n };\n}\n\nasync function scanGuidanceFiles(projectRoot: string): Promise<AgentGuidanceFileScan[]> {\n const scans: AgentGuidanceFileScan[] = [];\n for (const filename of AGENT_GUIDANCE_TARGET_FILENAMES) {\n const filePath = path.join(projectRoot, filename);\n const exists = await pathExists(filePath);\n if (!exists) {\n scans.push({\n file_path: filePath,\n exists,\n has_guidance: false,\n has_marker: false,\n });\n continue;\n }\n const content = await fs.readFile(filePath, \"utf8\");\n const contentLower = content.toLowerCase();\n const tokenHits = AGENT_GUIDANCE_REQUIRED_TOKENS.filter((token) => contentLower.includes(token));\n const hasMarker = hasGuidanceMarker(content);\n scans.push({\n file_path: filePath,\n exists,\n has_guidance: hasMarker || tokenHits.length >= AGENT_GUIDANCE_REQUIRED_TOKEN_THRESHOLD,\n has_marker: hasMarker,\n });\n }\n return scans;\n}\n\nfunction pushUnique(target: string[], value: string): void {\n if (!target.includes(value)) {\n target.push(value);\n }\n}\n\nfunction applyAgentGuidanceState(\n settings: PmSettings,\n currentState: PmSettings[\"agent_guidance\"],\n): { changed: boolean; state: PmSettings[\"agent_guidance\"] } {\n const existing = normalizeAgentGuidanceState(settings);\n const changed = JSON.stringify(existing) !== JSON.stringify(currentState);\n if (changed) {\n settings.agent_guidance = currentState;\n }\n return { changed, state: currentState };\n}\n\nasync function writeGuidanceFile(filePath: string): Promise<{ changed: boolean; warnings: string[] }> {\n const exists = await pathExists(filePath);\n const currentContent = exists ? await fs.readFile(filePath, \"utf8\") : \"\";\n const nextContent = upsertAgentGuidanceBlock(currentContent);\n if (!nextContent.changed) {\n return { changed: false, warnings: [] };\n }\n await fs.writeFile(filePath, nextContent.next_content, \"utf8\");\n return {\n changed: true,\n warnings: await runActiveOnWriteHooks({\n path: filePath,\n scope: \"project\",\n op: \"init:agent_guidance_file\",\n }),\n };\n}\n\nexport async function runInitAgentGuidance(options: RunInitAgentGuidanceOptions): Promise<RunInitAgentGuidanceResult> {\n const warnings: string[] = [];\n const nextSteps: string[] = [];\n const projectRoot = resolveProjectRoot(options.pm_root, options.cwd);\n let scans = await scanGuidanceFiles(projectRoot);\n const targetPath = resolveTargetGuidancePath(scans, projectRoot);\n const targetRelativePath = toPortableRelativePath(projectRoot, targetPath);\n const addLaterHint = \"Add workflow guidance later: pm init --agent-guidance add\";\n let prompted = false;\n let applied = false;\n let skipped = false;\n let state = normalizeAgentGuidanceState(options.settings);\n const checkedFiles = scans.map((entry) => toPortableRelativePath(projectRoot, entry.file_path));\n const presentBefore = scans.some((entry) => entry.has_guidance);\n\n const markState = (partial: Partial<PmSettings[\"agent_guidance\"]>): void => {\n state = {\n ...state,\n ...partial,\n template_version: AGENT_GUIDANCE_TEMPLATE_VERSION,\n last_checked_files: checkedFiles,\n };\n };\n\n if (options.mode === \"status\") {\n if (!presentBefore) {\n warnings.push(\"agent_guidance:missing\");\n pushUnique(nextSteps, addLaterHint);\n }\n } else if (options.mode === \"skip\") {\n skipped = true;\n markState({\n prompt_completed: true,\n declined: true,\n declined_at: state.declined_at.length > 0 ? state.declined_at : new Date().toISOString(),\n });\n warnings.push(\"agent_guidance:explicit_skip\");\n pushUnique(nextSteps, addLaterHint);\n } else if (options.mode === \"add\") {\n if (!presentBefore) {\n const writeResult = await writeGuidanceFile(targetPath);\n warnings.push(...writeResult.warnings);\n if (writeResult.changed) {\n applied = true;\n warnings.push(`agent_guidance:added:${targetRelativePath}`);\n }\n }\n markState({\n prompt_completed: true,\n declined: false,\n declined_at: \"\",\n });\n } else if (presentBefore) {\n if (state.declined) {\n markState({\n prompt_completed: true,\n declined: false,\n declined_at: \"\",\n });\n }\n } else if (state.prompt_completed && state.declined) {\n skipped = true;\n warnings.push(\"agent_guidance:skipped_declined\");\n pushUnique(nextSteps, addLaterHint);\n } else if (options.interactive) {\n prompted = true;\n const approved = await promptForGuidanceWrite(targetRelativePath);\n if (approved) {\n const writeResult = await writeGuidanceFile(targetPath);\n warnings.push(...writeResult.warnings);\n if (writeResult.changed) {\n applied = true;\n warnings.push(`agent_guidance:added:${targetRelativePath}`);\n }\n markState({\n prompt_completed: true,\n declined: false,\n declined_at: \"\",\n });\n } else {\n skipped = true;\n markState({\n prompt_completed: true,\n declined: true,\n declined_at: new Date().toISOString(),\n });\n warnings.push(\"agent_guidance:declined\");\n pushUnique(nextSteps, addLaterHint);\n }\n } else {\n warnings.push(\"agent_guidance:missing_non_interactive\");\n pushUnique(nextSteps, addLaterHint);\n }\n\n const stateUpdate = applyAgentGuidanceState(options.settings, state);\n if (applied) {\n scans = await scanGuidanceFiles(projectRoot);\n }\n\n const summary: InitAgentGuidanceSummary = {\n mode: options.mode,\n present: scans.some((entry) => entry.has_guidance),\n prompted,\n applied,\n skipped,\n declined: state.declined,\n prompt_completed: state.prompt_completed,\n template_version: state.template_version,\n target_file: targetRelativePath,\n checked_files: scans.map((entry) => toPortableRelativePath(projectRoot, entry.file_path)),\n files_with_guidance: scans\n .filter((entry) => entry.has_guidance)\n .map((entry) => toPortableRelativePath(projectRoot, entry.file_path)),\n missing_files: scans\n .filter((entry) => !entry.exists)\n .map((entry) => toPortableRelativePath(projectRoot, entry.file_path)),\n };\n\n return {\n summary,\n warnings,\n next_steps: nextSteps,\n settings_changed: stateUpdate.changed,\n };\n}\n"],"names":["fs","path","readline","input","output","nextContent","readline","input","output","path","fs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,eAAc;AACrB,SAAS,SAASC,QAAO,UAAUC,eAAc;;;ACHjD,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,cAAc;AACrB,SAAS,SAAS,OAAO,UAAU,cAAc;AAO1C,IAAM,kCAA2D,CAAC,OAAO,OAAO,QAAQ,QAAQ;AAEvG,IAAM,kCAAkC,CAAC,aAAa,WAAW;AACjE,IAAM,iCAAiC;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF,IAAM,0CAA0C;AAChD,IAAM,kCAAkC;AACxC,IAAM,qCAAqC;AAC3C,IAAM,8BAA8B,qCAAqC,+BAA+B;AACxG,IAAM,4BAA4B;AAqBlC,IAAI,uCAAuC,MAAsC,SAAS,gBAAgB,EAAE,OAAO,OAAM,CAAE;AAgD3H,SAAS,uBAAuB,aAAqB,YAAkB;AACrE,QAAM,WAAW,KAAK,SAAS,aAAa,UAAU;AACtD,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO,KAAK,SAAS,UAAU;EACjC;AACA,SAAO,SAAS,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG;AAC1C;AAEA,SAAS,sBAAsB,OAAa;AAC1C,SAAO,MAAM,SAAS,IAAI,IAAI,QAAQ,GAAG,KAAK;;AAChD;AAEA,SAAS,iBAAiB,OAAa;AACrC,SAAO,MAAM,SAAS,MAAM,IAAI,SAAS;AAC3C;AAEA,SAAS,uBAAuB,SAAe;AAC7C,QAAM,aAAa,QAAQ,QAAQ,kCAAkC;AACrE,MAAI,eAAe,IAAI;AACrB,WAAO;EACT;AACA,QAAM,iBAAiB,QAAQ,QAAQ,2BAA2B,UAAU;AAC5E,MAAI,mBAAmB,IAAI;AACzB,WAAO;EACT;AACA,SAAO;IACL,aAAa;IACb,WAAW,iBAAiB,0BAA0B;;AAE1D;AAEA,SAAS,kBAAkB,SAAe;AACxC,SAAO,uBAAuB,OAAO,MAAM;AAC7C;AAEA,SAAS,wBAAwB,YAAyB;AACxD,QAAM,QAAQ;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;AAEF,SAAO,MAAM,KAAK,UAAU;AAC9B;AAEA,SAAS,yBAAyB,iBAAuB;AACvD,QAAM,aAAa,iBAAiB,eAAe;AACnD,QAAM,YAAY,wBAAwB,UAAU;AACpD,QAAM,gBAAgB,uBAAuB,eAAe;AAC5D,MAAI,eAAe;AACjB,UAAM,kBAAkB,gBAAgB,MAAM,cAAc,SAAS;AACrE,UAAM,4BAA4B,gBAAgB,WAAW,MAAM,IAC/D,gBAAgB,MAAM,CAAC,IACvB,gBAAgB,WAAW,IAAI,IAC7B,gBAAgB,MAAM,CAAC,IACvB;AACN,UAAMC,eAAc,sBAClB,GAAG,gBAAgB,MAAM,GAAG,cAAc,WAAW,CAAC,GAAG,SAAS,GAAG,yBAAyB,EAAE;AAElG,WAAO;MACL,cAAcA;MACd,SAASA,iBAAgB;;EAE7B;AACA,QAAM,YAAY,gBAAgB,WAAW,IAAI,KAAK,gBAAgB,SAAS,IAAI,IAAI,OAAO;AAC9F,QAAM,cAAc,sBAAsB,GAAG,eAAe,GAAG,SAAS,GAAG,SAAS,EAAE;AACtF,SAAO;IACL,cAAc;IACd,SAAS,gBAAgB;;AAE7B;AAEA,SAAS,mBAAmB,QAAgB,KAAW;AACrD,QAAM,SAAS,KAAK,QAAQ,MAAM;AAClC,MAAI,KAAK,SAAS,MAAM,MAAM,QAAQ,KAAK,SAAS,MAAM,MAAM,WAAW;AACzE,WAAO,KAAK,QAAQ,MAAM;EAC5B;AACA,SAAO,KAAK,QAAQ,KAAK,MAAM;AACjC;AAEA,SAAS,0BAA0B,OAAgC,aAAmB;AACpF,QAAM,iBAAiB,MAAM,KAAK,CAAC,UAAU,KAAK,SAAS,MAAM,SAAS,MAAM,eAAe,MAAM,MAAM;AAC3G,MAAI,gBAAgB;AAClB,WAAO,eAAe;EACxB;AACA,QAAM,cAAc,MAAM,KAAK,CAAC,UAAU,MAAM,MAAM;AACtD,MAAI,aAAa;AACf,WAAO,YAAY;EACrB;AACA,SAAO,KAAK,KAAK,aAAa,WAAW;AAC3C;AAEA,SAAS,kBAAkB,QAAgB,gBAAuB;AAChE,QAAM,aAAa,OAAO,KAAI,EAAG,YAAW;AAC5C,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO;EACT;AACA,MAAI,eAAe,OAAO,eAAe,OAAO;AAC9C,WAAO;EACT;AACA,MAAI,eAAe,OAAO,eAAe,MAAM;AAC7C,WAAO;EACT;AACA,SAAO;AACT;AAEA,eAAe,uBAAuB,oBAA0B;AAC9D,QAAM,KAAK,qCAAoC;AAC/C,MAAI;AACF,WAAO,MAAM,0BAA0B;AACvC,WAAO,MAAM,gFAAgF;AAC7F,UAAM,SAAS,MAAM,GAAG,SAAS,wCAAwC,kBAAkB,UAAU;AACrG,WAAO,MAAM,IAAI;AACjB,WAAO,kBAAkB,QAAQ,IAAI;EACvC;AACE,OAAG,MAAK;EACV;AACF;AAEA,SAAS,4BAA4B,UAAoB;AACvD,QAAM,UAAU,SAAS;AACzB,SAAO;IACL,kBAAkB,SAAS,qBAAqB;IAChD,UAAU,SAAS,aAAa;IAChC,aAAa,OAAO,SAAS,gBAAgB,WAAW,QAAQ,cAAc;IAC9E,kBACE,OAAO,SAAS,qBAAqB,YAAY,OAAO,UAAU,QAAQ,gBAAgB,KAAK,QAAQ,mBAAmB,IACtH,QAAQ,mBACR;IACN,oBAAoB,MAAM,QAAQ,SAAS,kBAAkB,IACzD,CAAC,GAAG,IAAI,IAAI,QAAQ,mBAAmB,IAAI,CAAC,UAAU,MAAM,KAAI,CAAE,EAAE,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,KACxG,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC,IAE5C,CAAA;;AAER;AAEA,eAAe,kBAAkB,aAAmB;AAClD,QAAM,QAAiC,CAAA;AACvC,aAAW,YAAY,iCAAiC;AACtD,UAAM,WAAW,KAAK,KAAK,aAAa,QAAQ;AAChD,UAAM,SAAS,MAAM,WAAW,QAAQ;AACxC,QAAI,CAAC,QAAQ;AACX,YAAM,KAAK;QACT,WAAW;QACX;QACA,cAAc;QACd,YAAY;OACb;AACD;IACF;AACA,UAAM,UAAU,MAAM,GAAG,SAAS,UAAU,MAAM;AAClD,UAAM,eAAe,QAAQ,YAAW;AACxC,UAAM,YAAY,+BAA+B,OAAO,CAAC,UAAU,aAAa,SAAS,KAAK,CAAC;AAC/F,UAAM,YAAY,kBAAkB,OAAO;AAC3C,UAAM,KAAK;MACT,WAAW;MACX;MACA,cAAc,aAAa,UAAU,UAAU;MAC/C,YAAY;KACb;EACH;AACA,SAAO;AACT;AAEA,SAAS,WAAW,QAAkB,OAAa;AACjD,MAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,WAAO,KAAK,KAAK;EACnB;AACF;AAEA,SAAS,wBACP,UACA,cAA0C;AAE1C,QAAM,WAAW,4BAA4B,QAAQ;AACrD,QAAM,UAAU,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,YAAY;AACxE,MAAI,SAAS;AACX,aAAS,iBAAiB;EAC5B;AACA,SAAO,EAAE,SAAS,OAAO,aAAY;AACvC;AAEA,eAAe,kBAAkB,UAAgB;AAC/C,QAAM,SAAS,MAAM,WAAW,QAAQ;AACxC,QAAM,iBAAiB,SAAS,MAAM,GAAG,SAAS,UAAU,MAAM,IAAI;AACtE,QAAM,cAAc,yBAAyB,cAAc;AAC3D,MAAI,CAAC,YAAY,SAAS;AACxB,WAAO,EAAE,SAAS,OAAO,UAAU,CAAA,EAAE;EACvC;AACA,QAAM,GAAG,UAAU,UAAU,YAAY,cAAc,MAAM;AAC7D,SAAO;IACL,SAAS;IACT,UAAU,MAAM,sBAAsB;MACpC,MAAM;MACN,OAAO;MACP,IAAI;KACL;;AAEL;AAEA,eAAsB,qBAAqB,SAAoC;AAC7E,QAAM,WAAqB,CAAA;AAC3B,QAAM,YAAsB,CAAA;AAC5B,QAAM,cAAc,mBAAmB,QAAQ,SAAS,QAAQ,GAAG;AACnE,MAAI,QAAQ,MAAM,kBAAkB,WAAW;AAC/C,QAAM,aAAa,0BAA0B,OAAO,WAAW;AAC/D,QAAM,qBAAqB,uBAAuB,aAAa,UAAU;AACzE,QAAM,eAAe;AACrB,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI,UAAU;AACd,MAAI,QAAQ,4BAA4B,QAAQ,QAAQ;AACxD,QAAM,eAAe,MAAM,IAAI,CAAC,UAAU,uBAAuB,aAAa,MAAM,SAAS,CAAC;AAC9F,QAAM,gBAAgB,MAAM,KAAK,CAAC,UAAU,MAAM,YAAY;AAE9D,QAAM,YAAY,CAAC,YAAwD;AACzE,YAAQ;MACN,GAAG;MACH,GAAG;MACH,kBAAkB;MAClB,oBAAoB;;EAExB;AAEA,MAAI,QAAQ,SAAS,UAAU;AAC7B,QAAI,CAAC,eAAe;AAClB,eAAS,KAAK,wBAAwB;AACtC,iBAAW,WAAW,YAAY;IACpC;EACF,WAAW,QAAQ,SAAS,QAAQ;AAClC,cAAU;AACV,cAAU;MACR,kBAAkB;MAClB,UAAU;MACV,aAAa,MAAM,YAAY,SAAS,IAAI,MAAM,eAAc,oBAAI,KAAI,GAAG,YAAW;KACvF;AACD,aAAS,KAAK,8BAA8B;AAC5C,eAAW,WAAW,YAAY;EACpC,WAAW,QAAQ,SAAS,OAAO;AACjC,QAAI,CAAC,eAAe;AAClB,YAAM,cAAc,MAAM,kBAAkB,UAAU;AACtD,eAAS,KAAK,GAAG,YAAY,QAAQ;AACrC,UAAI,YAAY,SAAS;AACvB,kBAAU;AACV,iBAAS,KAAK,wBAAwB,kBAAkB,EAAE;MAC5D;IACF;AACA,cAAU;MACR,kBAAkB;MAClB,UAAU;MACV,aAAa;KACd;EACH,WAAW,eAAe;AACxB,QAAI,MAAM,UAAU;AAClB,gBAAU;QACR,kBAAkB;QAClB,UAAU;QACV,aAAa;OACd;IACH;EACF,WAAW,MAAM,oBAAoB,MAAM,UAAU;AACnD,cAAU;AACV,aAAS,KAAK,iCAAiC;AAC/C,eAAW,WAAW,YAAY;EACpC,WAAW,QAAQ,aAAa;AAC9B,eAAW;AACX,UAAM,WAAW,MAAM,uBAAuB,kBAAkB;AAChE,QAAI,UAAU;AACZ,YAAM,cAAc,MAAM,kBAAkB,UAAU;AACtD,eAAS,KAAK,GAAG,YAAY,QAAQ;AACrC,UAAI,YAAY,SAAS;AACvB,kBAAU;AACV,iBAAS,KAAK,wBAAwB,kBAAkB,EAAE;MAC5D;AACA,gBAAU;QACR,kBAAkB;QAClB,UAAU;QACV,aAAa;OACd;IACH,OAAO;AACL,gBAAU;AACV,gBAAU;QACR,kBAAkB;QAClB,UAAU;QACV,cAAa,oBAAI,KAAI,GAAG,YAAW;OACpC;AACD,eAAS,KAAK,yBAAyB;AACvC,iBAAW,WAAW,YAAY;IACpC;EACF,OAAO;AACL,aAAS,KAAK,wCAAwC;AACtD,eAAW,WAAW,YAAY;EACpC;AAEA,QAAM,cAAc,wBAAwB,QAAQ,UAAU,KAAK;AACnE,MAAI,SAAS;AACX,YAAQ,MAAM,kBAAkB,WAAW;EAC7C;AAEA,QAAM,UAAoC;IACxC,MAAM,QAAQ;IACd,SAAS,MAAM,KAAK,CAAC,UAAU,MAAM,YAAY;IACjD;IACA;IACA;IACA,UAAU,MAAM;IAChB,kBAAkB,MAAM;IACxB,kBAAkB,MAAM;IACxB,aAAa;IACb,eAAe,MAAM,IAAI,CAAC,UAAU,uBAAuB,aAAa,MAAM,SAAS,CAAC;IACxF,qBAAqB,MAClB,OAAO,CAAC,UAAU,MAAM,YAAY,EACpC,IAAI,CAAC,UAAU,uBAAuB,aAAa,MAAM,SAAS,CAAC;IACtE,eAAe,MACZ,OAAO,CAAC,UAAU,CAAC,MAAM,MAAM,EAC/B,IAAI,CAAC,UAAU,uBAAuB,aAAa,MAAM,SAAS,CAAC;;AAGxE,SAAO;IACL;IACA;IACA,YAAY;IACZ,kBAAkB,YAAY;;AAElC;;;ADjUM,SAAU,oBAAoB,QAAkB;AACpD,SAAO;IACL,IAAI,OAAO;IACX,MAAM,OAAO;IACb,WAAW,OAAO,SAAS;IAC3B,mBAAmB,OAAO;IAC1B,WAAW;MACT,SAAS,OAAO,SAAS,UAAU;MACnC,eAAe,OAAO,SAAS,UAAU;;IAE3C,eAAe,OAAO,SAAS,OAAO;IACtC,oBAAoB,OAAO,aAAa;IACxC,cAAc,OAAO;IACrB,UAAU,OAAO;IACjB,aAAa,OAAO;IACpB,GAAI,OAAO,yBAAyB,EAAE,wBAAwB,OAAO,uBAAsB,IAAK,CAAA;IAChG,GAAI,OAAO,qBAAqB,EAAE,oBAAoB,OAAO,mBAAkB,IAAK,CAAA;IACpF,YAAY,OAAO;IACnB,gBAAgB,OAAO;IACvB,MAAM;;AAEV;AAEO,IAAM,YAAY;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF,IAAI,8BAA8B,MAA6BC,UAAS,gBAAgB,EAAE,OAAAC,QAAO,QAAAC,QAAM,CAAE;AAEzG,SAAS,+BAA+B,SAAkD;AACxF,gCAA8B,YAAY,MAAMF,UAAS,gBAAgB,EAAE,OAAAC,QAAO,QAAAC,QAAM,CAAE;AAC5F;AAEA,SAAS,gBAAa;AACpB,SAAO,gBAAgB,iBAAiB;AAC1C;AAGA,IAAM,6BAAwD,CAAC,WAAW,WAAW,QAAQ;AAC7F,SAAS,8BAA8B,UAA4B;AACjE,MAAI,aAAa,QAAW;AAC1B,WAAO;EACT;AACA,QAAM,aAAa,SAAS,KAAI,EAAG,YAAW,EAAG,WAAW,KAAK,GAAG;AACpE,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,IAAI,WAAW,8BAA8B,UAAU,KAAK;EACpE;AACA,MAAI,eAAe,aAAa,eAAe,aAAa,eAAe,UAAU;AACnF,WAAO;EACT;AACA,MAAI,eAAe,UAAU,eAAe,WAAW;AACrD,WAAO;EACT;AACA,QAAM,IAAI,WACR,2BAA2B,QAAQ,eAAe,2BAA2B,KAAK,IAAI,CAAC,IACvF,UAAU,KAAK;AAEnB;AAEA,SAAS,wBAAwB,UAA4B;AAC3D,MAAI,aAAa,QAAW;AAC1B,WAAO;EACT;AACA,MAAI,SAAS,KAAI,EAAG,WAAW,GAAG;AAChC,UAAM,IAAI,WAAW,mCAAmC,UAAU,KAAK;EACzE;AACA,MAAI;AAIF,WAAO,wBAAwB,QAAQ;EACzC,QAAQ;AACN,UAAM,IAAI,WACR,gCAAgC,QAAQ,eAAe,kBAAkB,KAAK,IAAI,CAAC,IACnF,UAAU,KAAK;EAEnB;AACF;AAEA,SAAS,4BAA4B,UAA4B;AAC/D,MAAI,aAAa,QAAW;AAC1B,WAAO;EACT;AACA,QAAM,aAAa,SAAS,KAAI;AAChC,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,IAAI,WAAW,8BAA8B,UAAU,KAAK;EACpE;AACA,SAAO;AACT;AAEA,SAAS,+BAA+B,UAA4B;AAClE,MAAI,aAAa,QAAW;AAC1B,WAAO;EACT;AACA,QAAM,aAAa,SAAS,KAAI,EAAG,YAAW,EAAG,WAAW,KAAK,GAAG;AACpE,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,IAAI,WAAW,sCAAsC,UAAU,KAAK;EAC5E;AACA,MAAI,eAAe,SAAS,eAAe,SAAS,eAAe,UAAU,eAAe,UAAU;AACpG,WAAO;EACT;AACA,QAAM,IAAI,WACR,mCAAmC,QAAQ,eAAe,gCAAgC,KAAK,IAAI,CAAC,IACpG,UAAU,KAAK;AAEnB;AAEA,SAAS,iBAAiB,QAAgB,gBAAuB;AAC/D,QAAM,aAAa,OAAO,KAAI,EAAG,YAAW;AAC5C,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO;EACT;AACA,MAAI,eAAe,OAAO,eAAe,OAAO;AAC9C,WAAO;EACT;AACA,MAAI,eAAe,OAAO,eAAe,MAAM;AAC7C,WAAO;EACT;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,UAAsB,QAA+B;AAClF,QAAM,QAAQ,2BAA2B,MAAM;AAC/C,WAAS,aAAa;IACpB;IACA,GAAG;;AAEL,WAAS,WAAW,mBAAmB,MAAM;AAC7C,WAAS,WAAW,mBAAmB,MAAM;AAC/C;AAEA,SAAS,wBAAwB,OAAc;AAC7C,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,2BAA2B,QAA8B;AAChE,QAAM,UAAU,OAAO;AAQvB,SAAO;IACL,eAAe,QAAQ,kBAAkB;IACzC,iBAAiB,OAAO,QAAQ,oBAAoB,WAAW,QAAQ,kBAAkB;IACzF,UAAU,MAAM,QAAQ,QAAQ,QAAQ,IACpC,QAAQ,SAAS,OAAO,uBAAuB,EAAE,IAAI,CAAC,WAAW;MAC/D,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;MACvD,IAAI,MAAM,OAAO;MACjB,IACF,CAAA;;AAER;AAEA,eAAe,uBACb,QACA,UACA,QAA0B;AAE1B,QAAM,SAAS,+BAA+B,SAAS,MAAM;AAC7D,QAAM,YAAY,yBAAyB,QAAQ,OAAO,MAAM,OAAO,kCAAkC,KAAK;AAC9G,QAAM,SAAS,mBAAmB,MAAM,iBAAiB,SAAS,CAAC;AACnE,MAAI,WAAW;AACf,QAAM,aAAuB,CAAA;AAC7B,QAAM,UAAoB,CAAA;AAC1B,aAAW,cAAc,6BAA6B,MAAM,GAAG;AAC7D,UAAM,SAAS,eAAe,UAAU,UAAU;AAClD,eAAW,OAAO;AAClB,KAAC,OAAO,WAAW,UAAU,YAAY,KAAK,OAAO,WAAW,IAAI;EACtE;AACA,QAAM,gBAAgB,WAAW,uBAAuB,QAAQ,CAAC;AACjE,SAAO;IACL,MAAM;IACN;IACA;IACA,MAAM;;AAEV;AAEA,eAAe,sBAAsB,WAAiB;AACpD,QAAM,aAAa;IACjB;IACA;IACA;IACA;IACAC,MAAK,KAAK,WAAW,IAAI;;AAE3B,aAAW,aAAa,YAAY;AAClC,QAAI,MAAM,WAAWA,MAAK,KAAK,WAAW,SAAS,CAAC,GAAG;AACrD,aAAO;IACT;EACF;AACA,SAAO;AACT;AAEA,eAAe,4CAA4C,QAAgB,QAAuB,OAAc;AAC9G,MAAI,OAAO,SAAS,UAAa,OAAO;AACtC;EACF;AACA,MAAI,MAAM,WAAWA,MAAK,KAAK,QAAQ,eAAe,CAAC,GAAG;AACxD;EACF;AACA,MAAI,CAAE,MAAM,sBAAsB,MAAM,GAAI;AAC1C;EACF;AACA,QAAM,gBAAgBA,MAAK,KAAK,QAAQ,WAAW,IAAI;AACvD,QAAM,IAAI,WACR,oEAAoE,MAAM,MAC1E,UAAU,OACV;IACE,MAAM;IACN,MAAM;IACN,KAAK;IACL,UAAU;MACR,gBAAgB,aAAa;MAC7B;MACA,gBAAgB,MAAM;;IAExB,WAAW;MACT;MACA;MACA;;IAEF,UAAU;MACR,mBAAmB,gBAAgB,aAAa;;GAEnD;AAEL;AAEA,eAAe,cAAc,eAAuB,kBAAyB;AAK3E,QAAM,KAAK,4BAA2B;AACtC,MAAI;AACF,IAAAD,QAAO,MAAM,0CAA0C;AACvD,IAAAA,QAAO,MAAM,8FAA8F;AAE3G,IAAAA,QAAO,MAAM,sBAAsB;AACnC,IAAAA,QAAO,MAAM,+DAA+D;AAC5E,UAAM,eAAe,MAAM,GAAG,SAAS,mBAAmB,aAAa,KAAK;AAC5E,UAAM,iBAAiB,aAAa,KAAI,EAAG,SAAS,IAAI,gBAAgB,YAAY,IAAI;AAExF,IAAAA,QAAO,MAAM,2BAA2B;AACxC,IAAAA,QAAO,MAAM,sFAAsF;AACnG,IAAAA,QAAO,MAAM,6FAA6F;AAC1G,IAAAA,QAAO,MAAM,gFAAgF;AAC7F,UAAM,eAAe,MAAM,GAAG,SAAS,iEAAiE;AACxG,UAAM,eAAe,aAAa,KAAI,EAAG,SAAS,IAAI,aAAa,KAAI,IAAK;AAM5E,QAAI,iBAA0C;AAC9C,QAAI;AACF,uBAAiB,8BAA8B,YAAY;IAC7D,QAAQ;AACN,MAAAA,QAAO,MAAM,mCAAmC,YAAY;CAAqB;IACnF;AAEA,IAAAA,QAAO,MAAM,2BAA2B;AACxC,IAAAA,QAAO,MAAM,kFAAkF;AAC/F,UAAM,iBAAiB,mBAAmB,QAAQ;AAClD,UAAM,kBAAkB,MAAM,GAAG,SAAS,uCAAuC,cAAc,IAAI;AACnG,UAAM,mBAAmB,iBAAiB,iBAAiB,gBAAgB;AAE3E,IAAAA,QAAO,MAAM,IAAI;AACjB,WAAO;MACL,QAAQ;MACR,QAAQ;MACR,mBAAmB;;EAEvB;AACE,OAAG,MAAK;EACV;AACF;AAEA,eAAsB,QACpB,WACA,QACA,UAA8B,CAAA,GAAE;AAEhC,QAAM,MAAM,QAAQ,IAAG;AACvB,QAAM,SAAS,cAAc,KAAK,OAAO,IAAI;AAC7C,QAAM,4CAA4C,QAAQ,QAAQ,QAAQ,UAAU,IAAI;AACxF,QAAM,cAAwB,CAAA;AAC9B,QAAM,WAAqB,CAAA;AAC3B,MAAI,aAAa;AAEjB,aAAW,UAAU,qBAAqB;AACxC,UAAM,SAAS,SAASC,MAAK,KAAK,QAAQ,MAAM,IAAI;AACpD,UAAM,UAAU,MAAM,WAAW,MAAM;AACvC,UAAMC,IAAG,MAAM,QAAQ,EAAE,WAAW,KAAI,CAAE;AAC1C,QAAI,SAAS;AACX,eAAS,KAAK,kBAAkB,MAAM,EAAE;IAC1C,OAAO;AACL,kBAAY,KAAK,MAAM;IACzB;AACA,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP,IAAI;KACL,CAAE;EAEP;AAEA,QAAM,eAAeD,MAAK,KAAK,QAAQ,eAAe;AACtD,QAAM,iBAAiB,MAAM,WAAW,YAAY;AACpD,MAAI,mBAAmB,gBAAgB,SAAS;AAChD,QAAM,mBAAmB,8BAA8B,QAAQ,MAAM;AACrE,QAAM,cAAc,QAAQ,aAAa;AACzC,QAAM,mBAAmB,4BAA4B,QAAQ,MAAM;AACnE,QAAM,yBAAyB,QAAQ,iBAAiB;AACxD,QAAM,oBAAoB,+BAA+B,QAAQ,aAAa;AAC9E,QAAM,aAAa,wBAAwB,QAAQ,UAAU;AAC7D,MAAI,eAAe;AACnB,MAAI;AAEJ,MAAI;AACJ,MAAI,gBAAgB;AAClB,eAAW,MAAM,aAAa,MAAM;AACpC,aAAS,KAAK,kBAAkB,YAAY,EAAE;AAC9C,QAAI,UAAU;AACd,QAAI,cAAc,UAAa,SAAS,cAAc,kBAAkB;AACtE,eAAS,YAAY;AACrB,eAAS,KAAK,qBAAqB,gBAAgB,EAAE;AACrD,gBAAU;IACZ;AACA,QAAI,qBAAqB,UAAa,SAAS,WAAW,WAAW,kBAAkB;AACrF,4BAAsB,UAAU,gBAAgB;AAChD,eAAS,KAAK,6BAA6B,gBAAgB,EAAE;AAC7D,gBAAU;IACZ;AACA,QAAI,qBAAqB,UAAa,SAAS,mBAAmB,kBAAkB;AAClF,eAAS,iBAAiB;AAC1B,eAAS,KAAK,0BAA0B,gBAAgB,EAAE;AAC1D,gBAAU;IACZ;AACA,QAAI,SAAS;AACX,YAAM,cAAc,QAAQ,QAAQ;IACtC;EACF,OAAO;AACL,QAAI,qBAAqB,UAAa,CAAC,eAAe,QAAQ,MAAM,UAAU,QAAQ,QAAQ,OAAO,UAAU,MAAM;AACnH,YAAM,gBAAgB,MAAM,cAAc,kBAAkB,kBAAkB,UAAU,OAAO;AAC/F,yBAAmB,cAAc;AACjC,qBAAe,cAAc;AAC7B,+BAAyB,cAAc;AACvC,mBAAa;IACf;AACA,UAAM,kBAAkB,gBAAgB;AACxC,eAAW,cAAa;AACxB,aAAS,YAAY;AACrB,0BAAsB,UAAU,eAAe;AAC/C,QAAI,qBAAqB,QAAW;AAClC,eAAS,iBAAiB;IAC5B;AACA,QAAI,2BAA2B,QAAW;AACxC,eAAS,UAAU,UAAU;AAC7B,eAAS,UAAU,6BAA6B;IAClD;AACA,UAAM,cAAc,QAAQ,QAAQ;EACtC;AAEA,QAAM,sBAAsB,MAAM,qBAAqB;IACrD,SAAS;IACT;IACA,MAAM;IACN,aAAa,QAAQ,MAAM,UAAU,QAAQ,QAAQ,OAAO,UAAU;IACtE;GACD;AACD,WAAS,KAAK,GAAG,oBAAoB,QAAQ;AAC7C,MAAI,oBAAoB,kBAAkB;AACxC,UAAM,cAAc,QAAQ,QAAQ;EACtC;AAEA,QAAM,wBAAwB,MAAM,gCAAgC,QAAQ,SAAS,MAAM;AAC3F,aAAW,eAAe,sBAAsB,eAAe;AAC7D,gBAAY,KAAK,WAAW;AAC5B,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP,IAAI;KACL,CAAE;EAEP;AAEA,MAAI;AACJ,MAAI,eAAe,QAAW;AAC5B,2BAAuB,MAAM,uBAAuB,QAAQ,UAAU,UAAU;AAChF,aAAS,KAAK,0BAA0B,UAAU,EAAE;AACpD,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM,qBAAqB;MAC3B,OAAO;MACP,IAAI;KACL,CAAE;AAEL,eAAW,MAAM,aAAa,MAAM;EACtC;AAEA,QAAM,eAAe,wBAAwB,UAAU,gCAA+B,CAAE;AACxF,aAAW,cAAc,aAAa,SAAS;AAC7C,QAAK,oBAA0C,SAAS,UAAU,GAAG;AACnE;IACF;AACA,UAAM,SAASA,MAAK,KAAK,QAAQ,UAAU;AAC3C,UAAM,UAAU,MAAM,WAAW,MAAM;AACvC,UAAMC,IAAG,MAAM,QAAQ,EAAE,WAAW,KAAI,CAAE;AAC1C,QAAI,SAAS;AACX,eAAS,KAAK,kBAAkB,MAAM,EAAE;IAC1C,OAAO;AACL,kBAAY,KAAK,MAAM;IACzB;AACA,aAAS,KACP,GAAI,MAAM,sBAAsB;MAC9B,MAAM;MACN,OAAO;MACP,IAAI;KACL,CAAE;EAEP;AAEA,MAAI;AACJ,MAAI,wBAAwB;AAC1B,UAAM,uBAAuB,MAAM,aAAa,OAAO,EAAE,SAAS,MAAM,SAAS,KAAI,GAAI,MAAM;AAC/F,aAAS,KAAK,GAAG,qBAAqB,QAAQ;AAC9C,wBAAoB,2BAA2B,oBAAoB;AACnE,QAAI,CAAC,kBAAkB,iBAAiB,kBAAkB,SAAS,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG;AAC7F,YAAM,IAAI,WAAW,8EAA8E,UAAU,eAAe;IAC9H;EACF;AAEA,QAAM,YAAsB;IAC1B;IACA;IACA;;AAEF,MAAI,CAAC,wBAAwB;AAC3B,cAAU,KACR,6IAA6I;AAE/I,cAAU,KAAK,+EAA+E;EAChG,OAAO;AACL,cAAU,KAAK,kEAAkE;EACnF;AACA,MAAI,sBAAsB;AACxB,cAAU,KAAK,mEAAmE,qBAAqB,WAAW,CAAC,KAAK,qBAAqB,QAAQ,CAAC,CAAC,EAAE;EAC3J;AACA,YAAU,KAAK,2EAA2E;AAC1F,aAAW,oBAAoB,oBAAoB,YAAY;AAC7D,QAAI,CAAC,UAAU,SAAS,gBAAgB,GAAG;AACzC,gBAAU,KAAK,gBAAgB;IACjC;EACF;AAEA,SAAO;IACL,IAAI;IACJ,MAAM;IACN;IACA,cAAc;IACd;IACA,mBAAmB,SAAS,WAAW;IACvC,aAAa;IACb,GAAI,uBAAuB,EAAE,wBAAwB,qBAAoB,IAAK,CAAA;IAC9E,GAAI,oBAAoB,EAAE,oBAAoB,kBAAiB,IAAK,CAAA;IACpE,YAAY;IACZ,gBAAgB,oBAAoB;;AAExC","debugId":"56e7efe0-e981-5428-a2f7-b8bcad5b5868"}
@@ -2,14 +2,14 @@
2
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]="490c7409-913e-57cd-871b-a7eeb568b87c")}catch(e){}}();
3
3
  import {
4
4
  verifyHistoryChain
5
- } from "./chunk-JE5IZXDS.js";
5
+ } from "./chunk-CGQTFWYI.js";
6
6
  import {
7
7
  hashDocument
8
- } from "./chunk-L6YQONLM.js";
8
+ } from "./chunk-FPDK5BZQ.js";
9
9
  import {
10
10
  getHistoryPath,
11
11
  writeFileAtomic
12
- } from "./chunk-S2CDTRJ6.js";
12
+ } from "./chunk-SJCMTOEU.js";
13
13
 
14
14
  // dist/core/history/drift-scan.js
15
15
  import fs from "fs/promises";
@@ -182,6 +182,6 @@ async function scanHistoryDrift(pmRoot, items) {
182
182
  export {
183
183
  scanHistoryDrift
184
184
  };
185
- //# sourceMappingURL=chunk-Z647PYLD.js.map
185
+ //# sourceMappingURL=chunk-AJCQ5GT6.js.map
186
186
 
187
187
  //# debugId=490c7409-913e-57cd-871b-a7eeb568b87c
@@ -0,0 +1,61 @@
1
+ import {
2
+ getRuntimePath,
3
+ writeFileAtomic
4
+ } from "./chunk-CHM2VFVL.js";
5
+
6
+ // dist/core/session/session-state.js
7
+ import { promises as fs } from "node:fs";
8
+ import path from "node:path";
9
+ !(function() {
10
+ try {
11
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
12
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "03cd6a4a-8104-5155-b1ad-edbd6dc7b8dc");
13
+ } catch (e2) {
14
+ }
15
+ })();
16
+ var SESSION_FILENAME = "session.json";
17
+ function getSessionStatePath(pmRoot) {
18
+ return path.join(getRuntimePath(pmRoot), SESSION_FILENAME);
19
+ }
20
+ async function readSessionState(pmRoot) {
21
+ try {
22
+ const raw = await fs.readFile(getSessionStatePath(pmRoot), "utf8");
23
+ const parsed = JSON.parse(raw);
24
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
25
+ return {};
26
+ }
27
+ const focused = parsed.focused_item;
28
+ if (typeof focused === "string" && focused.trim().length > 0) {
29
+ return { focused_item: focused };
30
+ }
31
+ return {};
32
+ } catch {
33
+ return {};
34
+ }
35
+ }
36
+ async function writeSessionState(pmRoot, state) {
37
+ const target = getSessionStatePath(pmRoot);
38
+ await fs.mkdir(path.dirname(target), { recursive: true });
39
+ await writeFileAtomic(target, JSON.stringify(state));
40
+ }
41
+ async function getFocusedItem(pmRoot) {
42
+ const state = await readSessionState(pmRoot);
43
+ return state.focused_item;
44
+ }
45
+ async function setFocusedItem(pmRoot, id) {
46
+ const state = await readSessionState(pmRoot);
47
+ await writeSessionState(pmRoot, { ...state, focused_item: id });
48
+ }
49
+ async function clearFocusedItem(pmRoot) {
50
+ const state = await readSessionState(pmRoot);
51
+ const next = { ...state };
52
+ delete next.focused_item;
53
+ await writeSessionState(pmRoot, next);
54
+ }
55
+
56
+ export {
57
+ getFocusedItem,
58
+ setFocusedItem,
59
+ clearFocusedItem
60
+ };
61
+ //# sourceMappingURL=chunk-ALTGYHN3.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../core/session/session-state.ts"],
4
+ "sourcesContent": ["import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { getRuntimePath } from \"../store/paths.js\";\n\n/**\n * Session-local, gitignored state stored under `.agents/pm/runtime/session.json`.\n *\n * This is intentionally NOT the git-tracked settings.json: it holds ephemeral\n * per-checkout context (currently the \"focused\" parent item used as a default\n * --parent for `pm create`). Missing or corrupt state is treated as empty so a\n * stale or hand-edited file never blocks a command.\n */\nexport interface SessionState {\n focused_item?: string;\n}\n\nconst SESSION_FILENAME = \"session.json\";\n\nexport function getSessionStatePath(pmRoot: string): string {\n return path.join(getRuntimePath(pmRoot), SESSION_FILENAME);\n}\n\nexport async function readSessionState(pmRoot: string): Promise<SessionState> {\n try {\n const raw = await fs.readFile(getSessionStatePath(pmRoot), \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return {};\n }\n const focused = (parsed as Record<string, unknown>).focused_item;\n if (typeof focused === \"string\" && focused.trim().length > 0) {\n return { focused_item: focused };\n }\n return {};\n } catch {\n return {};\n }\n}\n\nasync function writeSessionState(pmRoot: string, state: SessionState): Promise<void> {\n const target = getSessionStatePath(pmRoot);\n await fs.mkdir(path.dirname(target), { recursive: true });\n await writeFileAtomic(target, JSON.stringify(state));\n}\n\nexport async function getFocusedItem(pmRoot: string): Promise<string | undefined> {\n const state = await readSessionState(pmRoot);\n return state.focused_item;\n}\n\nexport async function setFocusedItem(pmRoot: string, id: string): Promise<void> {\n const state = await readSessionState(pmRoot);\n await writeSessionState(pmRoot, { ...state, focused_item: id });\n}\n\nexport async function clearFocusedItem(pmRoot: string): Promise<void> {\n const state = await readSessionState(pmRoot);\n const next: SessionState = { ...state };\n delete next.focused_item;\n await writeSessionState(pmRoot, next);\n}\n"],
5
+ "mappings": ";;;;;;AAAA,SAAS,YAAY,UAAU;AAC/B,OAAO,UAAU;;;;;;;;AAiBjB,IAAM,mBAAmB;AAEnB,SAAU,oBAAoB,QAAc;AAChD,SAAO,KAAK,KAAK,eAAe,MAAM,GAAG,gBAAgB;AAC3D;AAEA,eAAsB,iBAAiB,QAAc;AACnD,MAAI;AACF,UAAM,MAAM,MAAM,GAAG,SAAS,oBAAoB,MAAM,GAAG,MAAM;AACjE,UAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,QAAI,WAAW,QAAQ,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAC1E,aAAO,CAAA;IACT;AACA,UAAM,UAAW,OAAmC;AACpD,QAAI,OAAO,YAAY,YAAY,QAAQ,KAAI,EAAG,SAAS,GAAG;AAC5D,aAAO,EAAE,cAAc,QAAO;IAChC;AACA,WAAO,CAAA;EACT,QAAQ;AACN,WAAO,CAAA;EACT;AACF;AAEA,eAAe,kBAAkB,QAAgB,OAAmB;AAClE,QAAM,SAAS,oBAAoB,MAAM;AACzC,QAAM,GAAG,MAAM,KAAK,QAAQ,MAAM,GAAG,EAAE,WAAW,KAAI,CAAE;AACxD,QAAM,gBAAgB,QAAQ,KAAK,UAAU,KAAK,CAAC;AACrD;AAEA,eAAsB,eAAe,QAAc;AACjD,QAAM,QAAQ,MAAM,iBAAiB,MAAM;AAC3C,SAAO,MAAM;AACf;AAEA,eAAsB,eAAe,QAAgB,IAAU;AAC7D,QAAM,QAAQ,MAAM,iBAAiB,MAAM;AAC3C,QAAM,kBAAkB,QAAQ,EAAE,GAAG,OAAO,cAAc,GAAE,CAAE;AAChE;AAEA,eAAsB,iBAAiB,QAAc;AACnD,QAAM,QAAQ,MAAM,iBAAiB,MAAM;AAC3C,QAAM,OAAqB,EAAE,GAAG,MAAK;AACrC,SAAO,KAAK;AACZ,QAAM,kBAAkB,QAAQ,IAAI;AACtC;",
6
+ "names": []
7
+ }