@unbrained/pm-cli 2026.7.11 → 2026.7.12

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 (436) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +36 -2
  3. package/README.md +0 -33
  4. package/dist/cli/commands/claim.d.ts +32 -1
  5. package/dist/cli/commands/claim.js +52 -15
  6. package/dist/cli/commands/claim.js.map +1 -1
  7. package/dist/cli/commands/completion.js +11 -2
  8. package/dist/cli/commands/completion.js.map +1 -1
  9. package/dist/cli/commands/create.js +4 -65
  10. package/dist/cli/commands/create.js.map +1 -1
  11. package/dist/cli/commands/index.d.ts +1 -1
  12. package/dist/cli/commands/index.js +3 -3
  13. package/dist/cli/commands/index.js.map +1 -1
  14. package/dist/cli/commands/init.js +18 -2
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/legacy-none-tokens.d.ts +49 -1
  17. package/dist/cli/commands/legacy-none-tokens.js +73 -2
  18. package/dist/cli/commands/legacy-none-tokens.js.map +1 -1
  19. package/dist/cli/commands/next.d.ts +14 -2
  20. package/dist/cli/commands/next.js +39 -11
  21. package/dist/cli/commands/next.js.map +1 -1
  22. package/dist/cli/commands/plan.d.ts +5 -0
  23. package/dist/cli/commands/plan.js +44 -2
  24. package/dist/cli/commands/plan.js.map +1 -1
  25. package/dist/cli/commands/update.js +7 -67
  26. package/dist/cli/commands/update.js.map +1 -1
  27. package/dist/cli/extension-command-help.d.ts +13 -1
  28. package/dist/cli/extension-command-help.js +79 -5
  29. package/dist/cli/extension-command-help.js.map +1 -1
  30. package/dist/cli/main.js +9 -6
  31. package/dist/cli/main.js.map +1 -1
  32. package/dist/cli/register-list-query.js +3 -2
  33. package/dist/cli/register-list-query.js.map +1 -1
  34. package/dist/cli/register-mutation.js +3 -2
  35. package/dist/cli/register-mutation.js.map +1 -1
  36. package/dist/cli/register-operations.js +24 -3
  37. package/dist/cli/register-operations.js.map +1 -1
  38. package/dist/cli-bundle/chunks/append-RH3G5RAV.js +11 -0
  39. package/dist/cli-bundle/chunks/{append-464PHZ65.js → append-T5DTS4NU.js} +5 -5
  40. package/dist/cli-bundle/chunks/{chunk-YMP6AKGU.js → chunk-2XWRFOPR.js} +3 -3
  41. package/dist/cli-bundle/chunks/{chunk-HT5P3WC6.js → chunk-2Z36LSAT.js} +6 -6
  42. package/dist/cli-bundle/chunks/{chunk-WQ5227PH.js → chunk-33O5P6KT.js} +135 -41
  43. package/dist/cli-bundle/chunks/chunk-33O5P6KT.js.map +7 -0
  44. package/dist/cli-bundle/chunks/{chunk-DBV6QRYT.js → chunk-3KJ3FG5O.js} +3 -3
  45. package/dist/cli-bundle/chunks/{chunk-AQLKMQQA.js → chunk-3M5BWYUA.js} +3 -3
  46. package/dist/cli-bundle/chunks/{chunk-GPBKJERW.js → chunk-3WASQS5G.js} +42 -6
  47. package/dist/cli-bundle/chunks/chunk-3WASQS5G.js.map +1 -0
  48. package/dist/cli-bundle/chunks/{chunk-47CCRGRH.js → chunk-47TKJR3D.js} +4 -4
  49. package/dist/cli-bundle/chunks/{chunk-YCSDMIQW.js → chunk-4MO4PPR2.js} +4 -4
  50. package/dist/cli-bundle/chunks/{chunk-WCRAUCJO.js → chunk-546WPG33.js} +5 -5
  51. package/dist/cli-bundle/chunks/{chunk-RLOWK5EQ.js → chunk-5754C5XS.js} +3 -3
  52. package/dist/cli-bundle/chunks/{chunk-7U5INZ2C.js → chunk-5V746BN3.js} +2 -2
  53. package/dist/cli-bundle/chunks/{chunk-7324AI5M.js → chunk-66YL6RR5.js} +30 -20
  54. package/dist/cli-bundle/chunks/{chunk-7324AI5M.js.map → chunk-66YL6RR5.js.map} +2 -2
  55. package/dist/cli-bundle/chunks/{chunk-ZLQDOBZL.js → chunk-6OK5QSGH.js} +4 -4
  56. package/dist/cli-bundle/chunks/{chunk-ROH64TST.js → chunk-6XNMSLBT.js} +78 -72
  57. package/dist/cli-bundle/chunks/chunk-6XNMSLBT.js.map +1 -0
  58. package/dist/cli-bundle/chunks/{chunk-2HNZKLHV.js → chunk-7SHFQB2A.js} +4 -4
  59. package/dist/cli-bundle/chunks/{chunk-6APTSPP5.js → chunk-7SIWW7C3.js} +4 -4
  60. package/dist/cli-bundle/chunks/{chunk-7HQQT6AT.js → chunk-7TYZTBEV.js} +3 -3
  61. package/dist/cli-bundle/chunks/{chunk-VTOQH22Y.js → chunk-A2HZUSEA.js} +8 -6
  62. package/dist/cli-bundle/chunks/{chunk-VTOQH22Y.js.map → chunk-A2HZUSEA.js.map} +1 -1
  63. package/dist/cli-bundle/chunks/{chunk-YCHJLOO2.js → chunk-A6AK7W5M.js} +2 -2
  64. package/dist/cli-bundle/chunks/{chunk-WBKZAO3P.js → chunk-A6AVSYRJ.js} +5 -5
  65. package/dist/cli-bundle/chunks/{chunk-L7C6RTGH.js → chunk-ACDIA6NP.js} +5 -5
  66. package/dist/cli-bundle/chunks/{chunk-AX3BJLPV.js → chunk-ACRC3HI4.js} +2 -2
  67. package/dist/cli-bundle/chunks/{chunk-QCKPSFII.js → chunk-AHIEDSW2.js} +30 -20
  68. package/dist/cli-bundle/chunks/{chunk-QCKPSFII.js.map → chunk-AHIEDSW2.js.map} +1 -1
  69. package/dist/cli-bundle/chunks/{chunk-B6JBI7JX.js → chunk-ANLHBXAE.js} +5 -5
  70. package/dist/cli-bundle/chunks/{chunk-2KQG6L3J.js → chunk-AS62PEJE.js} +4 -4
  71. package/dist/cli-bundle/chunks/{chunk-OJ64VYGO.js → chunk-BAK2VLTQ.js} +62 -33
  72. package/dist/cli-bundle/chunks/chunk-BAK2VLTQ.js.map +1 -0
  73. package/dist/cli-bundle/chunks/{chunk-J3EXRK2H.js → chunk-BLRO2POO.js} +3 -3
  74. package/dist/cli-bundle/chunks/{chunk-KDNZSVCK.js → chunk-CDR2A3VI.js} +15 -74
  75. package/dist/cli-bundle/chunks/chunk-CDR2A3VI.js.map +1 -0
  76. package/dist/cli-bundle/chunks/{chunk-2WGV5WRW.js → chunk-DJI5IS46.js} +42 -20
  77. package/dist/cli-bundle/chunks/{chunk-2WGV5WRW.js.map → chunk-DJI5IS46.js.map} +1 -1
  78. package/dist/cli-bundle/chunks/{chunk-VOXOXART.js → chunk-DLZ3RXAL.js} +5 -5
  79. package/dist/cli-bundle/chunks/{chunk-H6YDNW46.js → chunk-DNH44IKP.js} +4 -4
  80. package/dist/cli-bundle/chunks/{chunk-QI5KTH6A.js → chunk-EBBROE54.js} +9 -9
  81. package/dist/cli-bundle/chunks/{chunk-GC5ME4ZU.js → chunk-FF523THY.js} +4 -4
  82. package/dist/cli-bundle/chunks/{chunk-5OBMSBWX.js → chunk-FIZUJWXQ.js} +3 -3
  83. package/dist/cli-bundle/chunks/{chunk-HLBSL5KE.js → chunk-FVWQFTTW.js} +6 -6
  84. package/dist/cli-bundle/chunks/{chunk-YIWYD7TC.js → chunk-FVZEIWTL.js} +10 -10
  85. package/dist/cli-bundle/chunks/{chunk-E72ZO34Z.js → chunk-G6B5XGNV.js} +97 -32
  86. package/dist/cli-bundle/chunks/{chunk-E72ZO34Z.js.map → chunk-G6B5XGNV.js.map} +4 -4
  87. package/dist/cli-bundle/chunks/{chunk-4DC5XNMS.js → chunk-GFBV2254.js} +5 -5
  88. package/dist/cli-bundle/chunks/{chunk-OKZ35F3Y.js → chunk-GRB3TFOC.js} +3 -3
  89. package/dist/cli-bundle/chunks/{chunk-TZFULSN4.js → chunk-GVGFLZQS.js} +4 -4
  90. package/dist/cli-bundle/chunks/{chunk-RTG2LHQ7.js → chunk-HLZXQKGZ.js} +2 -2
  91. package/dist/cli-bundle/chunks/{chunk-5F7UJHFY.js → chunk-HO6CDURZ.js} +2 -2
  92. package/dist/cli-bundle/chunks/{chunk-MN2YMU55.js → chunk-HOE3UV3G.js} +3 -3
  93. package/dist/cli-bundle/chunks/{chunk-XQLLRYOX.js → chunk-HRCJGQXL.js} +134 -40
  94. package/dist/cli-bundle/chunks/chunk-HRCJGQXL.js.map +1 -0
  95. package/dist/cli-bundle/chunks/{chunk-I535LTZ2.js → chunk-IS6M4ETF.js} +4 -4
  96. package/dist/cli-bundle/chunks/{chunk-K7HEURQ4.js → chunk-J2XEW4YL.js} +3 -3
  97. package/dist/cli-bundle/chunks/{chunk-GZNB5V5J.js → chunk-J2ZDZG4A.js} +44 -12
  98. package/dist/cli-bundle/chunks/chunk-J2ZDZG4A.js.map +7 -0
  99. package/dist/cli-bundle/chunks/{chunk-O2Q7YQGO.js → chunk-J7XSQCJO.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-RA2LPP6E.js → chunk-JM4Z53DN.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-JR6FIX53.js → chunk-JNNPTGXR.js} +3 -3
  102. package/dist/cli-bundle/chunks/{chunk-I5VZGPS2.js → chunk-K7CGOZK5.js} +6 -6
  103. package/dist/cli-bundle/chunks/{chunk-B6OANV3G.js → chunk-KDH62ECD.js} +4 -4
  104. package/dist/cli-bundle/chunks/{chunk-LIY2ILWI.js → chunk-KXFY6AI4.js} +41 -5
  105. package/dist/cli-bundle/chunks/chunk-KXFY6AI4.js.map +7 -0
  106. package/dist/cli-bundle/chunks/{chunk-NR7PTIR7.js → chunk-L23NAJHL.js} +2 -2
  107. package/dist/cli-bundle/chunks/{chunk-FCZ6WYSR.js → chunk-LEXFDABF.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-GP54I36Z.js → chunk-LNAGQRIL.js} +2 -2
  109. package/dist/cli-bundle/chunks/{chunk-DD2WZD6L.js → chunk-LU4Z7POS.js} +3 -3
  110. package/dist/cli-bundle/chunks/{chunk-FEVEIX53.js → chunk-LX265XY7.js} +6 -6
  111. package/dist/cli-bundle/chunks/{chunk-NJABR6EB.js → chunk-MQAGSAMS.js} +4 -4
  112. package/dist/cli-bundle/chunks/{chunk-MRMS62WQ.js → chunk-N4NKVLPY.js} +4 -4
  113. package/dist/cli-bundle/chunks/{chunk-RY57ESL2.js → chunk-ND3MDD6L.js} +9 -9
  114. package/dist/cli-bundle/chunks/{chunk-Y476SA4V.js → chunk-NEJKKTCG.js} +2 -2
  115. package/dist/cli-bundle/chunks/{chunk-Q3EW4RE5.js → chunk-NGL3X3XM.js} +3 -3
  116. package/dist/cli-bundle/chunks/{chunk-ENJDRDDP.js → chunk-NK54BSL7.js} +8 -8
  117. package/dist/cli-bundle/chunks/{chunk-KHQYX2QB.js → chunk-NN57FRRN.js} +3 -3
  118. package/dist/cli-bundle/chunks/{chunk-VNCQ7SSG.js → chunk-NNRXTZ7Y.js} +4 -4
  119. package/dist/cli-bundle/chunks/{chunk-KZQHMDS6.js → chunk-NOIIRLCO.js} +2 -2
  120. package/dist/cli-bundle/chunks/{chunk-CTAPVM6C.js → chunk-O5ELBOEJ.js} +14 -73
  121. package/dist/cli-bundle/chunks/chunk-O5ELBOEJ.js.map +7 -0
  122. package/dist/cli-bundle/chunks/{chunk-K2PDZYUF.js → chunk-OC2CLNMS.js} +2 -2
  123. package/dist/cli-bundle/chunks/{chunk-SN7Q7M4U.js → chunk-OKUFGORG.js} +2 -2
  124. package/dist/cli-bundle/chunks/{chunk-ZLWBLI5R.js → chunk-OOK6V7BF.js} +3 -3
  125. package/dist/cli-bundle/chunks/{chunk-DDEYJ3BH.js → chunk-OUQ4I6HC.js} +3 -3
  126. package/dist/cli-bundle/chunks/{chunk-C4FIA5U6.js → chunk-OYCZDDUC.js} +61 -32
  127. package/dist/cli-bundle/chunks/chunk-OYCZDDUC.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-X7ZXLB3C.js → chunk-PDOJRPYR.js} +7 -7
  129. package/dist/cli-bundle/chunks/{chunk-HDNEQAHV.js → chunk-PHQPQNAT.js} +4 -4
  130. package/dist/cli-bundle/chunks/{chunk-FMFSUTTD.js → chunk-PTJ7NVUU.js} +4 -4
  131. package/dist/cli-bundle/chunks/{chunk-5URFS7C4.js → chunk-PUMGO764.js} +7 -7
  132. package/dist/cli-bundle/chunks/{chunk-RPZ57GQ7.js → chunk-QFCCN4JO.js} +2 -2
  133. package/dist/cli-bundle/chunks/{chunk-RAC2UXLT.js → chunk-QPWXNK56.js} +43 -11
  134. package/dist/cli-bundle/chunks/chunk-QPWXNK56.js.map +1 -0
  135. package/dist/cli-bundle/chunks/{chunk-35YNX7RQ.js → chunk-QYIDXRRX.js} +7 -7
  136. package/dist/cli-bundle/chunks/{chunk-ITIUEWD5.js → chunk-RFDT674H.js} +4 -4
  137. package/dist/cli-bundle/chunks/{chunk-2BUNV627.js → chunk-SJ2DADDH.js} +8 -8
  138. package/dist/cli-bundle/chunks/{chunk-MSPZSUKQ.js → chunk-SV7PEWKW.js} +41 -19
  139. package/dist/cli-bundle/chunks/{chunk-MSPZSUKQ.js.map → chunk-SV7PEWKW.js.map} +2 -2
  140. package/dist/cli-bundle/chunks/{chunk-ZYDUOY54.js → chunk-TKD4NESJ.js} +3 -3
  141. package/dist/cli-bundle/chunks/{chunk-BU2CV5ZU.js → chunk-TMNQV4EK.js} +2 -2
  142. package/dist/cli-bundle/chunks/{chunk-GJNBKU6G.js → chunk-TWELUDDF.js} +2 -2
  143. package/dist/cli-bundle/chunks/{chunk-A3AIKEYC.js → chunk-TYCM65DJ.js} +78 -72
  144. package/dist/cli-bundle/chunks/chunk-TYCM65DJ.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-Y5E6FCAL.js → chunk-U3S22BOJ.js} +4 -4
  146. package/dist/cli-bundle/chunks/{chunk-MORRAQXQ.js → chunk-UAZ6W3H3.js} +91 -33
  147. package/dist/cli-bundle/chunks/chunk-UAZ6W3H3.js.map +1 -0
  148. package/dist/cli-bundle/chunks/{chunk-2BKRMFGK.js → chunk-UFY4ETU6.js} +3 -3
  149. package/dist/cli-bundle/chunks/{chunk-EEUIIDWF.js → chunk-UGQENMKM.js} +2 -2
  150. package/dist/cli-bundle/chunks/{chunk-XK5CTXMB.js → chunk-UGSHP6SR.js} +4 -4
  151. package/dist/cli-bundle/chunks/{chunk-2JWIRG4V.js → chunk-VF24O6TV.js} +4 -4
  152. package/dist/cli-bundle/chunks/{chunk-PZBRTJ3Y.js → chunk-VLVTXEGG.js} +4 -4
  153. package/dist/cli-bundle/chunks/{chunk-X6HT3FP3.js → chunk-VMGK6ESD.js} +7 -5
  154. package/dist/cli-bundle/chunks/{chunk-X6HT3FP3.js.map → chunk-VMGK6ESD.js.map} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-NAGOH4YJ.js → chunk-VXUWCJS7.js} +2 -2
  156. package/dist/cli-bundle/chunks/{chunk-ETGRUM64.js → chunk-WBMARQCV.js} +3 -3
  157. package/dist/cli-bundle/chunks/{chunk-L6C62S4V.js → chunk-WZDABROA.js} +5 -5
  158. package/dist/cli-bundle/chunks/{chunk-P63GUQK5.js → chunk-XG5GVZRX.js} +4 -4
  159. package/dist/cli-bundle/chunks/{chunk-6UWHAJEX.js → chunk-XGCPTS6L.js} +10 -10
  160. package/dist/cli-bundle/chunks/{chunk-XGUXU4IQ.js → chunk-Y44B5FBE.js} +3 -3
  161. package/dist/cli-bundle/chunks/{chunk-C3QR2DPR.js → chunk-YP6DWEWQ.js} +3 -3
  162. package/dist/cli-bundle/chunks/{chunk-TB6364F7.js → chunk-Z7XTVIN5.js} +5 -5
  163. package/dist/cli-bundle/chunks/{chunk-XSJZF3TO.js → chunk-ZEKVLV6P.js} +4 -4
  164. package/dist/cli-bundle/chunks/{chunk-SNFLSFFH.js → chunk-ZFPOBSPC.js} +3 -3
  165. package/dist/cli-bundle/chunks/{chunk-RYASC6U3.js → chunk-ZUB725AA.js} +7 -7
  166. package/dist/cli-bundle/chunks/{close-A77IGXNC.js → close-CQHW3WMK.js} +5 -5
  167. package/dist/cli-bundle/chunks/close-ZZW5FLTB.js +12 -0
  168. package/dist/cli-bundle/chunks/{close-many-P2YOWN52.js → close-many-AR2YH3SJ.js} +12 -12
  169. package/dist/cli-bundle/chunks/close-many-IKCEGBLQ.js +21 -0
  170. package/dist/cli-bundle/chunks/comments-NV4SIY5Z.js +13 -0
  171. package/dist/cli-bundle/chunks/{comments-FNLKE3TW.js → comments-UV4HMI2K.js} +7 -7
  172. package/dist/cli-bundle/chunks/{copy-U6H22S7E.js → copy-OUFWOHVG.js} +4 -4
  173. package/dist/cli-bundle/chunks/copy-X7HJFWIH.js +9 -0
  174. package/dist/cli-bundle/chunks/{create-HS64DHTL.js → create-QEDL4KKT.js} +9 -9
  175. package/dist/cli-bundle/chunks/create-R6MMMMJS.js +25 -0
  176. package/dist/cli-bundle/chunks/{delete-4XPF5XLP.js → delete-MJGZFDHZ.js} +4 -4
  177. package/dist/cli-bundle/chunks/delete-OOJRG4HF.js +10 -0
  178. package/dist/cli-bundle/chunks/{deps-TMOF765V.js → deps-4OP6Q76N.js} +4 -4
  179. package/dist/cli-bundle/chunks/{deps-R44LVZTU.js → deps-Y5X6NFT5.js} +4 -4
  180. package/dist/cli-bundle/chunks/docs-SILTBWSO.js +14 -0
  181. package/dist/cli-bundle/chunks/{docs-HN6QKGEU.js → docs-UKTQVUHS.js} +6 -6
  182. package/dist/cli-bundle/chunks/{files-RNFWG435.js → files-2QEI2V3C.js} +6 -6
  183. package/dist/cli-bundle/chunks/{files-NX4LNOPL.js → files-7OIKZPI3.js} +6 -6
  184. package/dist/cli-bundle/chunks/focus-3YC5LFCG.js +10 -0
  185. package/dist/cli-bundle/chunks/{focus-OBSDVVI7.js → focus-FFWH32BF.js} +5 -5
  186. package/dist/cli-bundle/chunks/{history-compact-RZMMFSTO.js → history-compact-AAA4W6LY.js} +8 -8
  187. package/dist/cli-bundle/chunks/{history-compact-CKNRN637.js → history-compact-PIURAPW5.js} +8 -8
  188. package/dist/cli-bundle/chunks/history-redact-KWZ7LKQB.js +16 -0
  189. package/dist/cli-bundle/chunks/{history-redact-W7TTAEX2.js → history-redact-NTO74EIV.js} +6 -6
  190. package/dist/cli-bundle/chunks/history-repair-QWZJYYOJ.js +18 -0
  191. package/dist/cli-bundle/chunks/{history-repair-RGAQBOIS.js → history-repair-ROV5TD3L.js} +8 -8
  192. package/dist/cli-bundle/chunks/learnings-25TJCVON.js +13 -0
  193. package/dist/cli-bundle/chunks/{learnings-VDRTXWTF.js → learnings-3WJFJT7E.js} +7 -7
  194. package/dist/cli-bundle/chunks/{notes-UXXTI3J5.js → notes-FM53JJ5C.js} +7 -7
  195. package/dist/cli-bundle/chunks/notes-IAHGNCYQ.js +13 -0
  196. package/dist/cli-bundle/chunks/{plan-H3OPE2RP.js → plan-EJ4USP2S.js} +10 -10
  197. package/dist/cli-bundle/chunks/plan-WHV4H2RW.js +24 -0
  198. package/dist/cli-bundle/chunks/{profile-PFNN3CBJ.js → profile-SZQVKHUQ.js} +9 -9
  199. package/dist/cli-bundle/chunks/{profile-FCZWT5LE.js → profile-TXE673DR.js} +9 -9
  200. package/dist/cli-bundle/chunks/{register-list-query-BGEGWQ6S.js → register-list-query-LSR2G2SJ.js} +16 -16
  201. package/dist/cli-bundle/chunks/{register-list-query-BGEGWQ6S.js.map → register-list-query-LSR2G2SJ.js.map} +1 -1
  202. package/dist/cli-bundle/chunks/{register-list-query-ODDZVR6N.js → register-list-query-S6I73L5W.js} +15 -15
  203. package/dist/cli-bundle/chunks/{register-list-query-ODDZVR6N.js.map → register-list-query-S6I73L5W.js.map} +2 -2
  204. package/dist/cli-bundle/chunks/{register-mutation-OAJXSNWK.js → register-mutation-77GYER52.js} +32 -32
  205. package/dist/cli-bundle/chunks/{register-mutation-OAJXSNWK.js.map → register-mutation-77GYER52.js.map} +1 -1
  206. package/dist/cli-bundle/chunks/{register-mutation-2APBEHTJ.js → register-mutation-A2SC3K5G.js} +31 -31
  207. package/dist/cli-bundle/chunks/{register-mutation-2APBEHTJ.js.map → register-mutation-A2SC3K5G.js.map} +2 -2
  208. package/dist/cli-bundle/chunks/{register-operations-3TYKCKEZ.js → register-operations-KSAIBSZH.js} +43 -33
  209. package/dist/cli-bundle/chunks/register-operations-KSAIBSZH.js.map +1 -0
  210. package/dist/cli-bundle/chunks/{register-operations-WKZSX4QP.js → register-operations-W6Z5LVI5.js} +42 -32
  211. package/dist/cli-bundle/chunks/register-operations-W6Z5LVI5.js.map +7 -0
  212. package/dist/cli-bundle/chunks/{register-setup-HSVJDV3R.js → register-setup-KB5U3RES.js} +15 -15
  213. package/dist/cli-bundle/chunks/{register-setup-KE5L3H7U.js → register-setup-ZG7YXPHJ.js} +15 -15
  214. package/dist/cli-bundle/chunks/{restore-MDNVYUDD.js → restore-F5HPTRBR.js} +6 -6
  215. package/dist/cli-bundle/chunks/restore-LN57EB5H.js +14 -0
  216. package/dist/cli-bundle/chunks/{schema-AJCAANMB.js → schema-3DKXA4KR.js} +6 -6
  217. package/dist/cli-bundle/chunks/{schema-2B37DMM2.js → schema-QLTOK23S.js} +6 -6
  218. package/dist/cli-bundle/chunks/update-2T5EWMXD.js +21 -0
  219. package/dist/cli-bundle/chunks/{update-ZCDGTSNL.js → update-IKMNH3W4.js} +12 -12
  220. package/dist/cli-bundle/chunks/{update-many-6E2DDBE4.js → update-many-3Q6Z2Q4Y.js} +19 -19
  221. package/dist/cli-bundle/chunks/update-many-OTAS4BWH.js +30 -0
  222. package/dist/cli-bundle/main.js +75 -20
  223. package/dist/cli-bundle/main.js.map +2 -2
  224. package/dist/cli-bundle/sdk-runtime.js +63 -52
  225. package/dist/cli-bundle/sdk-testing.js +6 -6
  226. package/dist/cli-bundle/sdk.js +63 -54
  227. package/dist/cli-bundle/sdk.js.map +2 -2
  228. package/dist/core/extensions/item-fields.js +3 -3
  229. package/dist/core/extensions/item-fields.js.map +1 -1
  230. package/dist/core/extensions/loader.js +29 -20
  231. package/dist/core/extensions/loader.js.map +1 -1
  232. package/dist/core/schema/fields-file.js +5 -3
  233. package/dist/core/schema/fields-file.js.map +1 -1
  234. package/dist/sdk/cli-contracts/flag-contracts.js +12 -2
  235. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  236. package/dist/sdk/cli-contracts/tool-parameter-tables.js +14 -2
  237. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  238. package/dist/sdk/cli-contracts/tool-schema.d.ts +1 -1
  239. package/dist/sdk/cli-contracts/tool-schema.js +18 -6
  240. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  241. package/dist/sdk/index.d.ts +3 -1
  242. package/dist/sdk/index.js +4 -3
  243. package/dist/sdk/index.js.map +1 -1
  244. package/dist/sdk/runtime.d.ts +51 -1
  245. package/dist/sdk/runtime.js +91 -4
  246. package/dist/sdk/runtime.js.map +1 -1
  247. package/dist/sdk/workspace.d.ts +15 -0
  248. package/dist/sdk/workspace.js +50 -0
  249. package/dist/sdk/workspace.js.map +1 -0
  250. package/docs/AGENT_GUIDE.md +1 -0
  251. package/docs/CHATGPT_CODEX_PLUGIN_IMPLEMENTATION.md +775 -0
  252. package/docs/CODEX_PLUGIN.md +11 -1
  253. package/docs/COMMANDS.md +3 -1
  254. package/docs/README.md +3 -0
  255. package/docs/SDK.md +204 -71
  256. package/marketplace.json +2 -2
  257. package/package.json +3 -2
  258. package/packages/pm-beads/extensions/beads/runtime-loader.ts +3 -0
  259. package/packages/pm-beads/package.json +1 -1
  260. package/packages/pm-calendar/package.json +1 -1
  261. package/packages/pm-command-kit/package.json +1 -1
  262. package/packages/pm-governance-audit/package.json +1 -1
  263. package/packages/pm-guide-shell/package.json +1 -1
  264. package/packages/pm-kanban/package.json +1 -1
  265. package/packages/pm-lifecycle-hooks/package.json +1 -1
  266. package/packages/pm-linked-test-adapters/package.json +1 -1
  267. package/packages/pm-search-advanced/package.json +1 -1
  268. package/packages/pm-templates/package.json +1 -1
  269. package/packages/pm-todos/extensions/todos/runtime-loader.ts +3 -0
  270. package/packages/pm-todos/package.json +1 -1
  271. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  272. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  273. package/dist/cli-bundle/chunks/append-425YGJMY.js +0 -11
  274. package/dist/cli-bundle/chunks/chunk-A3AIKEYC.js.map +0 -7
  275. package/dist/cli-bundle/chunks/chunk-C4FIA5U6.js.map +0 -7
  276. package/dist/cli-bundle/chunks/chunk-CTAPVM6C.js.map +0 -7
  277. package/dist/cli-bundle/chunks/chunk-GPBKJERW.js.map +0 -1
  278. package/dist/cli-bundle/chunks/chunk-GZNB5V5J.js.map +0 -7
  279. package/dist/cli-bundle/chunks/chunk-KDNZSVCK.js.map +0 -1
  280. package/dist/cli-bundle/chunks/chunk-LIY2ILWI.js.map +0 -7
  281. package/dist/cli-bundle/chunks/chunk-MORRAQXQ.js.map +0 -1
  282. package/dist/cli-bundle/chunks/chunk-OJ64VYGO.js.map +0 -1
  283. package/dist/cli-bundle/chunks/chunk-RAC2UXLT.js.map +0 -1
  284. package/dist/cli-bundle/chunks/chunk-ROH64TST.js.map +0 -1
  285. package/dist/cli-bundle/chunks/chunk-WQ5227PH.js.map +0 -7
  286. package/dist/cli-bundle/chunks/chunk-XQLLRYOX.js.map +0 -1
  287. package/dist/cli-bundle/chunks/close-II7JKV32.js +0 -12
  288. package/dist/cli-bundle/chunks/close-many-FD46X4WK.js +0 -21
  289. package/dist/cli-bundle/chunks/comments-OAU2E7RK.js +0 -13
  290. package/dist/cli-bundle/chunks/copy-5MOERABQ.js +0 -9
  291. package/dist/cli-bundle/chunks/create-DOMKSBHN.js +0 -25
  292. package/dist/cli-bundle/chunks/delete-BMOQWZRQ.js +0 -10
  293. package/dist/cli-bundle/chunks/docs-J4OI4PWM.js +0 -14
  294. package/dist/cli-bundle/chunks/focus-7H5B4PKZ.js +0 -10
  295. package/dist/cli-bundle/chunks/history-redact-ZNS2QTMI.js +0 -16
  296. package/dist/cli-bundle/chunks/history-repair-LQ5IU4ZX.js +0 -18
  297. package/dist/cli-bundle/chunks/learnings-AHMJNIQZ.js +0 -13
  298. package/dist/cli-bundle/chunks/notes-GJI26GJR.js +0 -13
  299. package/dist/cli-bundle/chunks/plan-ZHJH6VMF.js +0 -24
  300. package/dist/cli-bundle/chunks/register-operations-3TYKCKEZ.js.map +0 -1
  301. package/dist/cli-bundle/chunks/register-operations-WKZSX4QP.js.map +0 -7
  302. package/dist/cli-bundle/chunks/restore-AR77QSO6.js +0 -14
  303. package/dist/cli-bundle/chunks/update-D3ZZ2V7Z.js +0 -21
  304. package/dist/cli-bundle/chunks/update-many-2Q2PRSSB.js +0 -30
  305. /package/dist/cli-bundle/chunks/{append-425YGJMY.js.map → append-RH3G5RAV.js.map} +0 -0
  306. /package/dist/cli-bundle/chunks/{append-464PHZ65.js.map → append-T5DTS4NU.js.map} +0 -0
  307. /package/dist/cli-bundle/chunks/{chunk-YMP6AKGU.js.map → chunk-2XWRFOPR.js.map} +0 -0
  308. /package/dist/cli-bundle/chunks/{chunk-HT5P3WC6.js.map → chunk-2Z36LSAT.js.map} +0 -0
  309. /package/dist/cli-bundle/chunks/{chunk-DBV6QRYT.js.map → chunk-3KJ3FG5O.js.map} +0 -0
  310. /package/dist/cli-bundle/chunks/{chunk-AQLKMQQA.js.map → chunk-3M5BWYUA.js.map} +0 -0
  311. /package/dist/cli-bundle/chunks/{chunk-47CCRGRH.js.map → chunk-47TKJR3D.js.map} +0 -0
  312. /package/dist/cli-bundle/chunks/{chunk-YCSDMIQW.js.map → chunk-4MO4PPR2.js.map} +0 -0
  313. /package/dist/cli-bundle/chunks/{chunk-WCRAUCJO.js.map → chunk-546WPG33.js.map} +0 -0
  314. /package/dist/cli-bundle/chunks/{chunk-RLOWK5EQ.js.map → chunk-5754C5XS.js.map} +0 -0
  315. /package/dist/cli-bundle/chunks/{chunk-7U5INZ2C.js.map → chunk-5V746BN3.js.map} +0 -0
  316. /package/dist/cli-bundle/chunks/{chunk-ZLQDOBZL.js.map → chunk-6OK5QSGH.js.map} +0 -0
  317. /package/dist/cli-bundle/chunks/{chunk-2HNZKLHV.js.map → chunk-7SHFQB2A.js.map} +0 -0
  318. /package/dist/cli-bundle/chunks/{chunk-6APTSPP5.js.map → chunk-7SIWW7C3.js.map} +0 -0
  319. /package/dist/cli-bundle/chunks/{chunk-7HQQT6AT.js.map → chunk-7TYZTBEV.js.map} +0 -0
  320. /package/dist/cli-bundle/chunks/{chunk-YCHJLOO2.js.map → chunk-A6AK7W5M.js.map} +0 -0
  321. /package/dist/cli-bundle/chunks/{chunk-WBKZAO3P.js.map → chunk-A6AVSYRJ.js.map} +0 -0
  322. /package/dist/cli-bundle/chunks/{chunk-L7C6RTGH.js.map → chunk-ACDIA6NP.js.map} +0 -0
  323. /package/dist/cli-bundle/chunks/{chunk-AX3BJLPV.js.map → chunk-ACRC3HI4.js.map} +0 -0
  324. /package/dist/cli-bundle/chunks/{chunk-B6JBI7JX.js.map → chunk-ANLHBXAE.js.map} +0 -0
  325. /package/dist/cli-bundle/chunks/{chunk-2KQG6L3J.js.map → chunk-AS62PEJE.js.map} +0 -0
  326. /package/dist/cli-bundle/chunks/{chunk-J3EXRK2H.js.map → chunk-BLRO2POO.js.map} +0 -0
  327. /package/dist/cli-bundle/chunks/{chunk-VOXOXART.js.map → chunk-DLZ3RXAL.js.map} +0 -0
  328. /package/dist/cli-bundle/chunks/{chunk-H6YDNW46.js.map → chunk-DNH44IKP.js.map} +0 -0
  329. /package/dist/cli-bundle/chunks/{chunk-QI5KTH6A.js.map → chunk-EBBROE54.js.map} +0 -0
  330. /package/dist/cli-bundle/chunks/{chunk-GC5ME4ZU.js.map → chunk-FF523THY.js.map} +0 -0
  331. /package/dist/cli-bundle/chunks/{chunk-5OBMSBWX.js.map → chunk-FIZUJWXQ.js.map} +0 -0
  332. /package/dist/cli-bundle/chunks/{chunk-HLBSL5KE.js.map → chunk-FVWQFTTW.js.map} +0 -0
  333. /package/dist/cli-bundle/chunks/{chunk-YIWYD7TC.js.map → chunk-FVZEIWTL.js.map} +0 -0
  334. /package/dist/cli-bundle/chunks/{chunk-4DC5XNMS.js.map → chunk-GFBV2254.js.map} +0 -0
  335. /package/dist/cli-bundle/chunks/{chunk-OKZ35F3Y.js.map → chunk-GRB3TFOC.js.map} +0 -0
  336. /package/dist/cli-bundle/chunks/{chunk-TZFULSN4.js.map → chunk-GVGFLZQS.js.map} +0 -0
  337. /package/dist/cli-bundle/chunks/{chunk-RTG2LHQ7.js.map → chunk-HLZXQKGZ.js.map} +0 -0
  338. /package/dist/cli-bundle/chunks/{chunk-5F7UJHFY.js.map → chunk-HO6CDURZ.js.map} +0 -0
  339. /package/dist/cli-bundle/chunks/{chunk-MN2YMU55.js.map → chunk-HOE3UV3G.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{chunk-I535LTZ2.js.map → chunk-IS6M4ETF.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{chunk-K7HEURQ4.js.map → chunk-J2XEW4YL.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{chunk-O2Q7YQGO.js.map → chunk-J7XSQCJO.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{chunk-RA2LPP6E.js.map → chunk-JM4Z53DN.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{chunk-JR6FIX53.js.map → chunk-JNNPTGXR.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{chunk-I5VZGPS2.js.map → chunk-K7CGOZK5.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{chunk-B6OANV3G.js.map → chunk-KDH62ECD.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{chunk-NR7PTIR7.js.map → chunk-L23NAJHL.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{chunk-FCZ6WYSR.js.map → chunk-LEXFDABF.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{chunk-GP54I36Z.js.map → chunk-LNAGQRIL.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{chunk-DD2WZD6L.js.map → chunk-LU4Z7POS.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{chunk-FEVEIX53.js.map → chunk-LX265XY7.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{chunk-NJABR6EB.js.map → chunk-MQAGSAMS.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{chunk-MRMS62WQ.js.map → chunk-N4NKVLPY.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{chunk-RY57ESL2.js.map → chunk-ND3MDD6L.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{chunk-Y476SA4V.js.map → chunk-NEJKKTCG.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{chunk-Q3EW4RE5.js.map → chunk-NGL3X3XM.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{chunk-ENJDRDDP.js.map → chunk-NK54BSL7.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{chunk-KHQYX2QB.js.map → chunk-NN57FRRN.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{chunk-VNCQ7SSG.js.map → chunk-NNRXTZ7Y.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{chunk-KZQHMDS6.js.map → chunk-NOIIRLCO.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{chunk-K2PDZYUF.js.map → chunk-OC2CLNMS.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{chunk-SN7Q7M4U.js.map → chunk-OKUFGORG.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{chunk-ZLWBLI5R.js.map → chunk-OOK6V7BF.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{chunk-DDEYJ3BH.js.map → chunk-OUQ4I6HC.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{chunk-X7ZXLB3C.js.map → chunk-PDOJRPYR.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{chunk-HDNEQAHV.js.map → chunk-PHQPQNAT.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{chunk-FMFSUTTD.js.map → chunk-PTJ7NVUU.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{chunk-5URFS7C4.js.map → chunk-PUMGO764.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{chunk-RPZ57GQ7.js.map → chunk-QFCCN4JO.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{chunk-35YNX7RQ.js.map → chunk-QYIDXRRX.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{chunk-ITIUEWD5.js.map → chunk-RFDT674H.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{chunk-2BUNV627.js.map → chunk-SJ2DADDH.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{chunk-ZYDUOY54.js.map → chunk-TKD4NESJ.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{chunk-BU2CV5ZU.js.map → chunk-TMNQV4EK.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{chunk-GJNBKU6G.js.map → chunk-TWELUDDF.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{chunk-Y5E6FCAL.js.map → chunk-U3S22BOJ.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-2BKRMFGK.js.map → chunk-UFY4ETU6.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-EEUIIDWF.js.map → chunk-UGQENMKM.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-XK5CTXMB.js.map → chunk-UGSHP6SR.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-2JWIRG4V.js.map → chunk-VF24O6TV.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-PZBRTJ3Y.js.map → chunk-VLVTXEGG.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-NAGOH4YJ.js.map → chunk-VXUWCJS7.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{chunk-ETGRUM64.js.map → chunk-WBMARQCV.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{chunk-L6C62S4V.js.map → chunk-WZDABROA.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{chunk-P63GUQK5.js.map → chunk-XG5GVZRX.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{chunk-6UWHAJEX.js.map → chunk-XGCPTS6L.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{chunk-XGUXU4IQ.js.map → chunk-Y44B5FBE.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{chunk-C3QR2DPR.js.map → chunk-YP6DWEWQ.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{chunk-TB6364F7.js.map → chunk-Z7XTVIN5.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{chunk-XSJZF3TO.js.map → chunk-ZEKVLV6P.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{chunk-SNFLSFFH.js.map → chunk-ZFPOBSPC.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{chunk-RYASC6U3.js.map → chunk-ZUB725AA.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{close-A77IGXNC.js.map → close-CQHW3WMK.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{close-II7JKV32.js.map → close-ZZW5FLTB.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{close-many-P2YOWN52.js.map → close-many-AR2YH3SJ.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{close-many-FD46X4WK.js.map → close-many-IKCEGBLQ.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{comments-OAU2E7RK.js.map → comments-NV4SIY5Z.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{comments-FNLKE3TW.js.map → comments-UV4HMI2K.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{copy-U6H22S7E.js.map → copy-OUFWOHVG.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{copy-5MOERABQ.js.map → copy-X7HJFWIH.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{create-HS64DHTL.js.map → create-QEDL4KKT.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{create-DOMKSBHN.js.map → create-R6MMMMJS.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{delete-4XPF5XLP.js.map → delete-MJGZFDHZ.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{delete-BMOQWZRQ.js.map → delete-OOJRG4HF.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{deps-TMOF765V.js.map → deps-4OP6Q76N.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{deps-R44LVZTU.js.map → deps-Y5X6NFT5.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{docs-J4OI4PWM.js.map → docs-SILTBWSO.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{docs-HN6QKGEU.js.map → docs-UKTQVUHS.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{files-RNFWG435.js.map → files-2QEI2V3C.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{files-NX4LNOPL.js.map → files-7OIKZPI3.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{focus-7H5B4PKZ.js.map → focus-3YC5LFCG.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{focus-OBSDVVI7.js.map → focus-FFWH32BF.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{history-compact-RZMMFSTO.js.map → history-compact-AAA4W6LY.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{history-compact-CKNRN637.js.map → history-compact-PIURAPW5.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{history-redact-ZNS2QTMI.js.map → history-redact-KWZ7LKQB.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{history-redact-W7TTAEX2.js.map → history-redact-NTO74EIV.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{history-repair-LQ5IU4ZX.js.map → history-repair-QWZJYYOJ.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{history-repair-RGAQBOIS.js.map → history-repair-ROV5TD3L.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{learnings-AHMJNIQZ.js.map → learnings-25TJCVON.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{learnings-VDRTXWTF.js.map → learnings-3WJFJT7E.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{notes-UXXTI3J5.js.map → notes-FM53JJ5C.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{notes-GJI26GJR.js.map → notes-IAHGNCYQ.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{plan-H3OPE2RP.js.map → plan-EJ4USP2S.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{plan-ZHJH6VMF.js.map → plan-WHV4H2RW.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{profile-PFNN3CBJ.js.map → profile-SZQVKHUQ.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{profile-FCZWT5LE.js.map → profile-TXE673DR.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{register-setup-HSVJDV3R.js.map → register-setup-KB5U3RES.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{register-setup-KE5L3H7U.js.map → register-setup-ZG7YXPHJ.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{restore-MDNVYUDD.js.map → restore-F5HPTRBR.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{restore-AR77QSO6.js.map → restore-LN57EB5H.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{schema-AJCAANMB.js.map → schema-3DKXA4KR.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{schema-2B37DMM2.js.map → schema-QLTOK23S.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{update-D3ZZ2V7Z.js.map → update-2T5EWMXD.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{update-ZCDGTSNL.js.map → update-IKMNH3W4.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{update-many-6E2DDBE4.js.map → update-many-3Q6Z2Q4Y.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{update-many-2Q2PRSSB.js.map → update-many-OTAS4BWH.js.map} +0 -0
@@ -0,0 +1,775 @@
1
+ # Native ChatGPT and Codex Plugin Implementation Plan
2
+
3
+ Tracked research: [pm-n28t](../.agents/pm/tasks/pm-n28t.toon). Future implementation:
4
+ [pm-95d7](../.agents/pm/features/pm-95d7.toon).
5
+
6
+ Research date: **2026-07-11**. This page is a research and implementation plan. It does not record a completed
7
+ plugin remediation, ChatGPT app deployment, or public plugin submission.
8
+
9
+ ## Executive Conclusion
10
+
11
+ The current `plugins/pm-codex` package is an actual native Codex plugin, but it is not yet a complete,
12
+ self-contained, validation-clean ChatGPT/Codex distribution.
13
+
14
+ - It has the required `.codex-plugin/plugin.json`, a repo marketplace entry, skills, and bundled MCP
15
+ configuration. An isolated Codex CLI 0.144.1 install accepted it, enabled it, and registered `pm-mcp`.
16
+ - It is not self-contained after marketplace installation. The installed cache does not contain `dist/` or
17
+ dependencies, so the launcher falls through to `npx -y --package=@unbrained/pm-cli@latest pm-mcp`.
18
+ - It currently fails the built-in `@plugin-creator` validator because every bundled skill points at icon files
19
+ that do not exist relative to that skill.
20
+ - Its `commands/` directory is not a documented Codex plugin component and is not referenced from the manifest.
21
+ Those files must be treated as unverified payload, not advertised functionality.
22
+ - It is not a ChatGPT app. It has no `.app.json`, developer-mode app mapping, reachable HTTPS or tunnel-backed
23
+ MCP endpoint, Apps SDK tool metadata, or app submission evidence.
24
+ - Its MCP descriptors expose input schemas, but not the output schemas or required safety annotations expected
25
+ for a submitted MCP-backed plugin.
26
+
27
+ The correct strategy is therefore two explicit tracks:
28
+
29
+ 1. Make the local Codex and ChatGPT desktop-hosted plugin self-contained, validation-clean, and truthful.
30
+ 2. Decide separately whether to build an MCP-backed ChatGPT app. If that track is selected, choose how a web
31
+ client will reach the git-native repository before writing app code.
32
+
33
+ Do not describe these tracks as one interchangeable artifact. A native plugin package and a ChatGPT app are
34
+ related, but they are not the same thing.
35
+
36
+ ## Verdict Matrix
37
+
38
+ | Question | Verified answer on 2026-07-11 | Consequence |
39
+ |---|---|---|
40
+ | Is `pm-codex` a native Codex plugin? | Yes. Codex installs the marketplace entry and registers its skills/MCP server. | Keep the plugin lineage; do not replace it with an unrelated format. |
41
+ | Is the installed plugin self-contained? | No. Its cached launcher uses `npx ...@latest` when no repo `dist/` is reachable. | Bundle or package a version-matched runtime inside the installed artifact. |
42
+ | Does the official validator pass? | No. Six skill icon checks fail. | Fix per-skill assets or remove invalid skill icon declarations. |
43
+ | Is it a ChatGPT app? | No. There is no app mapping or ChatGPT-reachable MCP endpoint. | Build and test an app only after choosing a repository-access architecture. |
44
+ | Is it ready for public plugin submission? | No. App transport, annotations, schemas, legal metadata, tests, and review materials are incomplete. | Treat submission as a later gated phase. |
45
+ | Is the current `mcpServers` wrapper proven invalid? | No. Codex 0.144.1, OpenAI-curated plugins, and the current `@plugin-creator` scaffold accept it. | Do not make a speculative casing-only edit. Add compatibility validation instead. |
46
+ | Are files under `commands/` proven Codex plugin commands? | No. Current plugin docs list skills, apps, MCP config, hooks, and assets, not a `commands/` component. | Migrate useful prompts into skills or remove the unsupported claim. |
47
+
48
+ ## Source Currency and Research Method
49
+
50
+ The sources below were opened live on 2026-07-11. The Codex documentation URLs on
51
+ `developers.openai.com` currently redirect to official pages on `learn.chatgpt.com`; both are OpenAI-owned
52
+ documentation surfaces. The current pages, not older remembered terminology, are the source of truth for this
53
+ plan.
54
+
55
+ Primary official sources:
56
+
57
+ - [Plugins](https://developers.openai.com/codex/plugins) — supported clients, install behavior, plugin parts,
58
+ and permission boundaries.
59
+ - [Build plugins](https://developers.openai.com/codex/plugins/build) — scaffold, marketplace, manifest,
60
+ distribution, MCP configuration, hooks, and packaging.
61
+ - [Build an app](https://learn.chatgpt.com/docs/build-app) — distinction between the plugin package and its
62
+ optional MCP-backed app.
63
+ - [Submit plugins](https://learn.chatgpt.com/docs/submit-plugins) — portal fields, review, tool annotations,
64
+ tests, identity, verification, and publishing.
65
+ - [Apps SDK overview](https://developers.openai.com/apps-sdk) and
66
+ [MCP server guide](https://developers.openai.com/apps-sdk/build/mcp-server) — ChatGPT app runtime model.
67
+ - [Define tools](https://developers.openai.com/apps-sdk/plan/tools) and
68
+ [Apps SDK reference](https://developers.openai.com/apps-sdk/reference) — focused tools, schemas,
69
+ `structuredContent`, and annotations.
70
+ - [Deploy your app](https://developers.openai.com/apps-sdk/deploy) and
71
+ [Connect from ChatGPT](https://developers.openai.com/apps-sdk/deploy/connect-chatgpt) — stable HTTPS `/mcp`,
72
+ developer mode, refresh, and client testing.
73
+ - [Authentication](https://developers.openai.com/apps-sdk/build/auth) and
74
+ [Security and privacy](https://developers.openai.com/apps-sdk/guides/security-privacy) — OAuth 2.1,
75
+ authorization, scopes, consent, prompt injection, logging, and data handling.
76
+ - [Test your integration](https://developers.openai.com/apps-sdk/deploy/testing) — handler tests, MCP
77
+ Inspector, developer mode, API Playground, golden prompts, and regression checks.
78
+ - [MCP Apps compatibility](https://developers.openai.com/apps-sdk/mcp-apps-in-chatgpt) — portable iframe UI
79
+ bridge and ChatGPT extensions.
80
+ - [Secure MCP Tunnel](https://developers.openai.com/api/docs/guides/secure-mcp-tunnels) — outbound-only access
81
+ from ChatGPT/Codex to a private or local MCP server.
82
+ - [Apps SDK changelog](https://developers.openai.com/apps-sdk/changelog) and
83
+ [Codex changelog](https://developers.openai.com/codex/changelog) — recent behavior and plugin rollout
84
+ changes.
85
+
86
+ Live implementation evidence was also collected from:
87
+
88
+ - Codex CLI 0.144.1 contracts and an isolated temporary `CODEX_HOME`.
89
+ - The current OpenAI-curated plugin cache installed with Codex.
90
+ - The built-in `@plugin-creator` scaffold and validator.
91
+ - The repository manifest, marketplace, launcher, tool definitions, smokes, and docs.
92
+
93
+ The official build page currently describes a companion `.mcp.json` as a direct server map or a wrapped
94
+ `mcp_servers` object. In contrast, the current OpenAI-curated plugins, `@plugin-creator` scaffold, validator,
95
+ and Codex 0.144.1 use or accept a wrapped `mcpServers` object. This is a documentation/runtime discrepancy.
96
+ The working runtime contract wins for this checkout, and a future change must be driven by executable
97
+ validation across supported Codex versions rather than by casing speculation.
98
+
99
+ ## The Current OpenAI Product Model
100
+
101
+ ### Plugin
102
+
103
+ A plugin is the package a user discovers, installs, shares, submits, and publishes. It may contain:
104
+
105
+ - one or more skills;
106
+ - an MCP-backed app;
107
+ - bundled MCP server configuration for a Codex host;
108
+ - lifecycle hooks;
109
+ - visual assets; or
110
+ - a combination of those parts.
111
+
112
+ Every plugin has a `.codex-plugin/plugin.json` entry point. Skills, `.app.json`, `.mcp.json`, hooks, and assets
113
+ belong at the plugin root, not inside `.codex-plugin/`.
114
+
115
+ ### App
116
+
117
+ An app is an MCP-backed capability inside a plugin. Its server defines tools, authentication, data handling,
118
+ and real behavior. A custom UI is optional. When UI is useful, the app registers MCP UI resources and uses the
119
+ MCP Apps bridge; ChatGPT-specific `window.openai` APIs are extensions, not the default portable foundation.
120
+
121
+ An app is needed when a plugin must expose live tools to ChatGPT, connect to a service, authenticate a user, or
122
+ perform actions through MCP. A skill-only plugin remains valid, but it does not turn a local CLI into a remotely
123
+ reachable ChatGPT tool service.
124
+
125
+ ### Marketplace
126
+
127
+ A marketplace is an ordered catalog, not the plugin itself. The current documented locations are:
128
+
129
+ - repo: `$REPO_ROOT/.agents/plugins/marketplace.json`;
130
+ - personal: `~/.agents/plugins/marketplace.json`; and
131
+ - legacy repo compatibility: `$REPO_ROOT/.claude-plugin/marketplace.json`.
132
+
133
+ Marketplace sources may be local, Git-backed, or npm-backed. Codex copies an installed plugin into
134
+ `~/.codex/plugins/cache/<marketplace>/<plugin>/<version>/` and loads the cached copy. A relative path that only
135
+ works because the source repository has files above the plugin directory is therefore not a portable runtime
136
+ dependency.
137
+
138
+ ### Supported surfaces are not identical execution environments
139
+
140
+ Plugins can be browsed from ChatGPT Work, the ChatGPT desktop app, Codex CLI, and the Codex IDE extension.
141
+ That shared directory does not make a local stdio process reachable from a web conversation. ChatGPT app tools
142
+ need a reachable HTTPS `/mcp` endpoint or a supported tunnel to a private MCP server. Local Codex MCP servers
143
+ continue to execute under the Codex host sandbox and approval policy.
144
+
145
+ ## Current Repository Audit
146
+
147
+ ### Shipped layout
148
+
149
+ ```text
150
+ plugins/pm-codex/
151
+ ├── .codex-plugin/plugin.json
152
+ ├── .mcp.json
153
+ ├── README.md
154
+ ├── assets/pm-cli-small.svg
155
+ ├── commands/
156
+ │ ├── pm-audit.md
157
+ │ ├── pm-close-task.md
158
+ │ └── pm-start-task.md
159
+ ├── scripts/pm-mcp-server.mjs
160
+ └── skills/
161
+ ├── pm-auditor/
162
+ ├── pm-native/
163
+ └── pm-release/
164
+ ```
165
+
166
+ The manifest declares `skills` and `mcpServers`. It does not declare `apps` or `hooks`. That is a valid
167
+ plugin class: a plugin does not need an app or hook merely to be a plugin.
168
+
169
+ ### Isolated install proof
170
+
171
+ The repository install instructions were replayed with a new temporary Codex home:
172
+
173
+ ```bash
174
+ CODEX_HOME=<temporary-directory> codex plugin marketplace add .
175
+ CODEX_HOME=<temporary-directory> codex plugin add pm-codex@pm-local --json
176
+ CODEX_HOME=<temporary-directory> codex plugin list
177
+ CODEX_HOME=<temporary-directory> codex mcp list
178
+ ```
179
+
180
+ Observed results:
181
+
182
+ - marketplace `pm-local` resolved from the repository;
183
+ - `pm-codex@pm-local` version `2026.7.11` installed and became enabled;
184
+ - Codex copied the plugin to its versioned cache;
185
+ - `pm-mcp` appeared as an enabled stdio MCP server; and
186
+ - the current camel-case `.mcp.json` wrapper was accepted.
187
+
188
+ This disproves the broad claim that the repository has no real native Codex plugin.
189
+
190
+ ### Installed runtime defect
191
+
192
+ The cached archive contains the plugin files listed above, but no repository `dist/`, dependency tree, or
193
+ plugin-local package runtime. The generated launcher tries, in order:
194
+
195
+ 1. `PM_CLI_MCP_SERVER`;
196
+ 2. a readable `dist/mcp/server.js` found by walking ancestors of the launcher; then
197
+ 3. `npx -y --package=@unbrained/pm-cli@latest pm-mcp`.
198
+
199
+ The versioned cache is outside the source checkout, so normal external installs cannot find the repository
200
+ `dist/mcp/server.js`. They therefore use the third branch. This has four consequences:
201
+
202
+ - startup requires network and npm availability;
203
+ - the running server version can differ from the installed plugin version;
204
+ - `@latest` makes behavior change independently of installed skills and documentation; and
205
+ - the current “native” description implies a more self-contained artifact than users receive.
206
+
207
+ The current Codex smoke starts the repository `dist/mcp/server.js` directly. It proves the MCP implementation,
208
+ but it does not exercise the installed cache, launcher fallback, offline startup, or plugin/runtime version
209
+ coherence.
210
+
211
+ ### Validator defect
212
+
213
+ The official built-in validation path was run as follows:
214
+
215
+ ```bash
216
+ uv run --with pyyaml python \
217
+ /path/to/plugin-creator/scripts/validate_plugin.py \
218
+ plugins/pm-codex
219
+ ```
220
+
221
+ It fails six checks. Each of `pm-auditor`, `pm-native`, and `pm-release` declares both `icon_small` and
222
+ `icon_large` as `./assets/pm-cli-small.svg` in its own `agents/openai.yaml`, but none of those skill directories
223
+ contains `assets/pm-cli-small.svg`. The one existing asset is at the plugin root. Skill metadata paths are
224
+ resolved relative to the skill, so install tolerance does not make those references valid.
225
+
226
+ ### Unsupported or unproven command payload
227
+
228
+ The official plugin structure documents skills, hooks, app mappings, MCP configuration, and assets. It does not
229
+ document a Codex plugin `commands/` loader or a manifest `commands` field. The current manifest does not point at
230
+ the directory, and the built-in validator ignores it.
231
+
232
+ The three command Markdown files may be useful prompt content, but the repository has no current-head proof
233
+ that Codex exposes them as slash commands. They should be migrated into supported skills when they add unique
234
+ value, or removed. Until then, docs must not count them as a working native capability.
235
+
236
+ ### MCP descriptor gap for a ChatGPT app
237
+
238
+ `src/mcp/tool-definitions.ts` currently defines each tool with:
239
+
240
+ - `name`;
241
+ - `description`; and
242
+ - `inputSchema`.
243
+
244
+ The `tools/list` response returns those definitions directly. It does not provide `outputSchema` or Apps SDK
245
+ annotations such as `readOnlyHint`, `openWorldHint`, and `destructiveHint`.
246
+
247
+ That is sufficient for the current local MCP smoke, but not for a review-ready ChatGPT app. OpenAI requires the
248
+ three safety hints for every submitted MCP tool, recommends output schemas for structured results, and expects
249
+ tool names, descriptions, schemas, output structure, and actual behavior to agree.
250
+
251
+ The broad `pm_run` tool and combined list/add/remove/run tools also conflict with the Apps SDK recommendation of
252
+ one focused job per tool and separate read/write actions. A public app surface must not simply expose the entire
253
+ local escape hatch.
254
+
255
+ ### Public listing and legal gap
256
+
257
+ The manifest currently uses `SECURITY.md` as its privacy policy and `LICENSE` as its terms of service. Those are
258
+ useful project documents, but they are not a privacy policy or service terms describing an MCP app, user data,
259
+ retention, authentication, support, or hosted processing. Public submission also requires matching publisher
260
+ identity, support information, production branding, a public MCP URL, domain verification, and policy
261
+ attestations.
262
+
263
+ ### Identity and authorization gap
264
+
265
+ The local `.mcp.json` sets `PM_AUTHOR=codex-agent`. That gives local history a stable fallback author, but it is
266
+ not end-user identity or authorization. A hosted multi-user app must derive the actor from authenticated server
267
+ context, authorize the selected repository and operation on every request, and prevent callers from spoofing
268
+ another history author through tool arguments.
269
+
270
+ ## Target Architecture
271
+
272
+ ```text
273
+ Local Codex or desktop-hosted workflow
274
+
275
+ repo/Git/npm marketplace
276
+
277
+
278
+ versioned cached plugin
279
+
280
+ ├── bundled skills
281
+ └── bundled stdio pm MCP runtime
282
+
283
+
284
+ selected local repo
285
+
286
+
287
+ .agents/pm
288
+
289
+ ChatGPT web or public plugin workflow
290
+
291
+ published/shared plugin
292
+
293
+
294
+ app/connector mapping
295
+
296
+
297
+ HTTPS /mcp or Secure MCP Tunnel
298
+
299
+
300
+ authorized backend or customer-controlled host
301
+
302
+
303
+ explicitly selected repository and .agents/pm
304
+ ```
305
+
306
+ These flows may share action handlers, schemas, and tests. They should not share assumptions about filesystem
307
+ access, process lifetime, authentication, or network reachability.
308
+
309
+ ## Track A: Correct Local Codex Plugin
310
+
311
+ ### Target package layout
312
+
313
+ ```text
314
+ plugins/pm-codex/
315
+ ├── .codex-plugin/plugin.json
316
+ ├── .mcp.json
317
+ ├── README.md
318
+ ├── assets/
319
+ │ ├── composer-icon.svg
320
+ │ ├── logo.png
321
+ │ └── logo-dark.png
322
+ ├── runtime/
323
+ │ └── pm-mcp-server.mjs
324
+ └── skills/
325
+ ├── pm-auditor/
326
+ │ ├── SKILL.md
327
+ │ ├── agents/openai.yaml
328
+ │ └── assets/...
329
+ ├── pm-native/...
330
+ └── pm-release/...
331
+ ```
332
+
333
+ The exact runtime filename is not important. The invariant is: every file needed after installation exists
334
+ inside the copied plugin archive, uses an archive-relative path, and is versioned with the plugin.
335
+
336
+ ### Runtime packaging requirements
337
+
338
+ Preferred implementation:
339
+
340
+ 1. Produce a single bundled Node entry point for the stdio MCP server during the normal build/release pipeline.
341
+ 2. Put that bundle and every required runtime dependency inside `plugins/pm-codex` before packaging.
342
+ 3. Point `.mcp.json` directly at the bundled entry point.
343
+ 4. Remove the `@latest` startup fallback from the installed path. An explicit development override may remain,
344
+ but production startup must not silently change versions.
345
+ 5. Stamp plugin, marketplace, and runtime metadata from the same package-owned version source.
346
+ 6. Make the release gate install the copied plugin in an isolated Codex home with no ancestor repo `dist/`.
347
+ 7. Prove the server starts with npm network access unavailable and with `npx` absent from `PATH`.
348
+
349
+ An alternative is a dedicated npm plugin package. The marketplace supports `source: "npm"`, but Codex downloads
350
+ that package without running lifecycle scripts. The published tarball must therefore already contain the plugin
351
+ manifest and runnable bundled server; a post-install build is not a valid design.
352
+
353
+ Pinning the fallback to the plugin version is an acceptable short-term risk reduction, but it is not the target:
354
+ it remains network-dependent and does not provide an offline, self-contained plugin.
355
+
356
+ ### Manifest and MCP rules
357
+
358
+ - Keep the stable kebab-case plugin name.
359
+ - Keep paths relative to the plugin root and `./`-prefixed.
360
+ - Include only component fields whose target files exist.
361
+ - Keep real publisher, repository, homepage, license, and install-surface metadata.
362
+ - Use production-ready logo assets for distribution; keep per-skill icons inside each skill archive when declared.
363
+ - Keep `mcpServers: "./.mcp.json"` while the supported runtime and canonical scaffold require it.
364
+ - Do not add `apps` until a real `.app.json` has been generated for a real developer-mode app or connector.
365
+ - Do not add hooks merely to appear more native. Hooks are optional and require separate trust review.
366
+ - Treat `commands/` as unsupported until an official contract and executable test prove otherwise.
367
+
368
+ The current canonical scaffold emits:
369
+
370
+ ```json
371
+ {
372
+ "mcpServers": "./.mcp.json"
373
+ }
374
+ ```
375
+
376
+ with a companion:
377
+
378
+ ```json
379
+ {
380
+ "mcpServers": {
381
+ "pm-mcp": {
382
+ "command": "node",
383
+ "args": ["./runtime/pm-mcp-server.mjs"],
384
+ "env": {
385
+ "PM_AUTHOR": "codex-agent"
386
+ }
387
+ }
388
+ }
389
+ }
390
+ ```
391
+
392
+ Before changing this shape, generate a fresh temporary scaffold with the then-installed `@plugin-creator`, run
393
+ its validator, install the result with the minimum supported Codex version and current Codex version, and record
394
+ the compatibility result.
395
+
396
+ ### Marketplace rules
397
+
398
+ The existing repo marketplace location and source path are correct. Preserve:
399
+
400
+ ```json
401
+ {
402
+ "name": "pm-local",
403
+ "interface": {
404
+ "displayName": "pm CLI Local"
405
+ },
406
+ "plugins": [
407
+ {
408
+ "name": "pm-codex",
409
+ "source": {
410
+ "source": "local",
411
+ "path": "./plugins/pm-codex"
412
+ },
413
+ "policy": {
414
+ "installation": "AVAILABLE",
415
+ "authentication": "ON_INSTALL"
416
+ },
417
+ "category": "Developer Tools"
418
+ }
419
+ ]
420
+ }
421
+ ```
422
+
423
+ For external distribution, choose one explicit source:
424
+
425
+ - `git-subdir` with a pinned tag or commit for the plugin subdirectory; or
426
+ - `npm` with a dedicated, already-built plugin package.
427
+
428
+ Do not use a moving branch plus a frozen plugin version, and do not rely on files outside the source archive.
429
+ Use `codex plugin marketplace add`, `list`, and `upgrade`; do not tell users to hand-edit `config.toml`.
430
+
431
+ ### Skill and prompt migration
432
+
433
+ For each current command Markdown file:
434
+
435
+ 1. Compare it with the existing `pm-native`, `pm-auditor`, and `pm-release` skills.
436
+ 2. Delete it when it duplicates a skill.
437
+ 3. Otherwise create a properly named skill directory with a complete `SKILL.md`, trigger conditions, and any
438
+ referenced assets/scripts.
439
+ 4. Keep instructions scoped. Do not claim unavailable tools or bypass repository `AGENTS.md` rules.
440
+ 5. Validate every skill and start a new Codex session before testing discovery.
441
+
442
+ ## Track B: Decide the ChatGPT Repository-Access Model
443
+
444
+ The current pm value proposition is local, git-native project management. A ChatGPT web app cannot infer or
445
+ mount a user laptop repository. Before building an Apps SDK server, accept one of these architectures in an ADR.
446
+
447
+ ### Option 1: Secure MCP Tunnel to a customer-controlled host
448
+
449
+ Best fit for private development, teams, and enterprise workspaces that want ChatGPT to act on an existing local
450
+ or private repository without publishing the pm server.
451
+
452
+ - Run the pm MCP server on the host that can access the repository.
453
+ - Run OpenAI `tunnel-client` in the same trust boundary.
454
+ - Use an outbound-only OpenAI-hosted tunnel endpoint.
455
+ - Associate the correct Platform organization and ChatGPT workspace.
456
+ - Create a developer-mode app with the Tunnel connection option.
457
+ - Keep the customer-controlled host online while tools are in use.
458
+
459
+ This preserves local filesystem semantics and avoids a new pm storage service. It adds host operations,
460
+ workspace/tunnel permissions, availability, and identity-mapping requirements. It is a strong first ChatGPT
461
+ proof, but it is not by itself a universal public plugin architecture.
462
+
463
+ ### Option 2: Hosted multi-tenant MCP service
464
+
465
+ Required if the intended outcome is a universal public plugin whose tools work without a customer-run host.
466
+
467
+ The service needs an explicit repository substrate, for example a GitHub App plus isolated server-side
468
+ workspaces. That is a new product surface, not a packaging tweak. It must define:
469
+
470
+ - repository selection and authorization;
471
+ - checkout, branch, commit, push, and conflict behavior;
472
+ - tenant isolation and path containment;
473
+ - concurrent mutation and locking semantics;
474
+ - storage lifetime and deletion;
475
+ - secret management and OAuth scopes;
476
+ - audit identity and mapping to `PM_AUTHOR`;
477
+ - job limits, process execution, sandboxing, and egress;
478
+ - reconciliation when remote Git changes during a session; and
479
+ - observability, incident response, support, privacy, and data residency.
480
+
481
+ Do not host arbitrary `pm test --run` or package installation in the first public version. Those operations can
482
+ spawn processes or load third-party code and require a substantially stronger sandbox.
483
+
484
+ ### Option 3: Skills-only public plugin
485
+
486
+ This can publish pm planning and workflow guidance without a hosted tool backend. It is the smallest public
487
+ artifact, but users would not receive live pm tools in ChatGPT web. The listing must state that limitation
488
+ plainly.
489
+
490
+ ### Recommendation
491
+
492
+ 1. Finish Track A.
493
+ 2. Prove a private ChatGPT developer-mode app through Secure MCP Tunnel.
494
+ 3. Use that proof to decide whether a hosted public service creates enough value to justify its security and
495
+ operations scope.
496
+ 4. Submit publicly only after the chosen architecture is production-ready.
497
+
498
+ ## Track C: Build the MCP-Backed ChatGPT App
499
+
500
+ This track starts only after the ADR above is accepted.
501
+
502
+ ### Transport and deployment
503
+
504
+ - Expose MCP on a stable HTTPS `/mcp` endpoint, or through an approved Secure MCP Tunnel.
505
+ - Support low-latency streaming responses, dependable TLS, timeouts, structured logs, metrics, and request IDs.
506
+ - Separate the reusable pm action layer from stdio and HTTP transport adapters.
507
+ - Keep the HTTP adapter stateless where possible; bind repository/user context explicitly per request.
508
+ - Return MCP protocol errors without leaking stack traces, filesystem paths, tokens, or private data.
509
+ - Provide a health/readiness probe outside the MCP tool surface.
510
+
511
+ ### Developer-mode app wiring
512
+
513
+ For local app development:
514
+
515
+ 1. Enable Developer mode in ChatGPT under Settings → Security and login.
516
+ 2. Create a developer-mode app under Settings → Plugins using the reachable `/mcp` endpoint or Tunnel.
517
+ 3. Copy the generated ID beginning with `plugin_asdk_app`.
518
+ 4. Use the built-in `@plugin-creator` to add `.app.json` and the `apps: "./.app.json"` manifest field.
519
+ 5. Install the local marketplace plugin, start a new task, and test both skills and tools.
520
+
521
+ Do not invent an app ID or commit a personal placeholder. For public submission, the portal takes the production
522
+ MCP server URL and scans it directly; it does not accept an existing published ChatGPT app ID as a substitute.
523
+
524
+ ### App tool contract
525
+
526
+ Do not expose `pm_run` as the primary public app tool. Start with a small, focused surface.
527
+
528
+ | Tool class | Examples | Required annotation posture |
529
+ |---|---|---|
530
+ | Read-only | context, next, search, list, get, contracts, check-only health/validate | `readOnlyHint: true`, `openWorldHint: false`, `destructiveHint: false` |
531
+ | Reversible private writes | create item, update metadata, add comment, claim, release | `readOnlyHint: false`, normally `openWorldHint: false`, `destructiveHint: false` |
532
+ | Consequential lifecycle writes | close, cancel, dependency changes, bulk changes | write annotations plus explicit confirmation; set `destructiveHint` from the actual reversibility contract |
533
+ | Dangerous or code-executing operations | delete, history redaction, linked-test execution, package install, arbitrary config/schema mutation | exclude from v1 or isolate behind dedicated tools, strict auth, approval, and sandboxing |
534
+
535
+ For every exposed tool:
536
+
537
+ - one user-visible job per tool;
538
+ - precise name and description;
539
+ - closed, typed `inputSchema` where possible;
540
+ - exact `outputSchema` for `structuredContent`;
541
+ - stable machine identifiers in outputs;
542
+ - `readOnlyHint`, `openWorldHint`, and `destructiveHint` that match every possible invocation;
543
+ - `idempotentHint` where true;
544
+ - server-side authorization regardless of hints;
545
+ - compact model-visible content with sensitive/private data kept out; and
546
+ - deterministic errors for missing repositories, stale item versions, ownership conflicts, and invalid state.
547
+
548
+ Split mixed tools. For example, one tool that lists, adds, removes, and runs tests cannot honestly have one set of
549
+ safety annotations. Use separate read and mutation tools or keep that operation out of the app.
550
+
551
+ ### UI decision
552
+
553
+ Start tool-only unless a UI materially improves review, comparison, editing, confirmation, or navigation. If a UI
554
+ is justified:
555
+
556
+ - use the MCP Apps standard `_meta.ui.resourceUri` and `ui/*` JSON-RPC bridge by default;
557
+ - serve the component through an MCP resource;
558
+ - return data as `structuredContent` independently of rendering;
559
+ - use `window.openai` only for ChatGPT-specific extensions;
560
+ - declare a minimal CSP and dedicated component origin; and
561
+ - test inline, fullscreen/modal where used, mobile, dark mode, keyboard, and accessibility behavior.
562
+
563
+ ## Authentication, Authorization, and Data Protection
564
+
565
+ Anything that exposes customer-specific repository data or write actions should authenticate the user. The
566
+ official Apps SDK flow expects OAuth 2.1 conforming to the MCP authorization specification.
567
+
568
+ Required controls for a hosted app:
569
+
570
+ - publish protected-resource and authorization-server discovery metadata;
571
+ - support authorization-code flow with PKCE `S256`;
572
+ - use Client ID Metadata Documents where supported, with DCR only when needed;
573
+ - include the MCP resource/audience in issued tokens;
574
+ - validate signature, issuer, audience/resource, time bounds, scopes, and app policy on every request;
575
+ - return standards-compliant `401` and `WWW-Authenticate` challenges;
576
+ - request least-privilege scopes and separate read from write scopes;
577
+ - bind repository access to authenticated identity and tenant;
578
+ - reject user-supplied author spoofing;
579
+ - redact tokens, secrets, PII, raw prompts, internal IDs, and debug payloads from responses and logs; and
580
+ - document retention, deletion, support, subprocess, Git, and third-party data behavior.
581
+
582
+ Treat prompt injection as expected input. Validate all paths and arguments server-side, contain repository roots,
583
+ enforce state transitions in pm, and require confirmation for consequential actions. Tool annotations influence
584
+ ChatGPT confirmation UX; they do not replace server authorization.
585
+
586
+ For a tunnel-backed internal app, document the separate Platform tunnel permissions, ChatGPT developer-mode
587
+ permissions, workspace association, host availability, and customer responsibility for the repository host.
588
+
589
+ ## Listing, Legal, and Submission Requirements
590
+
591
+ Before public submission, prepare:
592
+
593
+ - verified developer or business identity in the submitting Platform organization;
594
+ - Apps Management write access for the submitter;
595
+ - customer-facing plugin name and descriptions;
596
+ - production logo, category, website, and support URL;
597
+ - an actual privacy policy and terms of service for the shipped service;
598
+ - public production MCP URL and exact authentication details;
599
+ - domain verification at `/.well-known/openai-apps-challenge` when requested;
600
+ - exact content security policy for any UI/network domains;
601
+ - reviewer credentials that do not require MFA, email, SMS, or private-network access;
602
+ - starter prompts;
603
+ - exactly five positive and three negative review test cases;
604
+ - country/region availability; and
605
+ - release notes and accurate policy attestations.
606
+
607
+ The portal scans the production MCP server and tool metadata. Fix every scan result and rescan before submission.
608
+ Approval does not publish automatically; after review, the publisher chooses when to publish. Published
609
+ skills-only, app-only, and app-plus-skills packages appear in the same universal plugin directory.
610
+
611
+ ## Verification Matrix
612
+
613
+ ### Track A: local plugin gates
614
+
615
+ | Gate | Evidence required |
616
+ |---|---|
617
+ | Manifest/skills | Current built-in `@plugin-creator` validator passes with no missing asset or placeholder errors. |
618
+ | Marketplace | Repo, Git, and/or npm source resolves to the intended plugin root with version and policy metadata. |
619
+ | Cache install | Fresh isolated `CODEX_HOME`; marketplace add; plugin add; installed/enabled status. |
620
+ | Runtime | `codex mcp list` shows the plugin-scoped server; initialize and `tools/list` pass from the cached copy. |
621
+ | Offline | Cached server starts with no repo ancestor, no npm network, and no `npx` fallback. |
622
+ | Version | Manifest, marketplace, bundled runtime, server info, and package release identify the same version. |
623
+ | Skills | Fresh session discovers each skill; explicit and implicit triggers behave as documented. |
624
+ | Unsupported payload | No advertised command or agent asset lacks an ingestion contract and runtime proof. |
625
+ | Platforms | Linux, macOS, and Windows path/process behavior is covered proportionally to supported Codex clients. |
626
+ | Regression | Existing pm MCP calls mutate only a sandbox tracker during automated tests. |
627
+
628
+ ### Track C: ChatGPT app gates
629
+
630
+ | Gate | Evidence required |
631
+ |---|---|
632
+ | Handler unit tests | Representative inputs, schema failures, empty results, conflicts, auth failures, and edge cases. |
633
+ | MCP Inspector | List and call every tool; inspect raw requests, responses, components, and errors. |
634
+ | HTTPS/tunnel | Reachable `/mcp`, TLS, streaming, timeouts, health, logs, metrics, and reconnect behavior. |
635
+ | Developer mode | New ChatGPT task selects correct tools for direct, indirect, and negative golden prompts. |
636
+ | API Playground | Raw MCP exchanges and auth challenges match declared schemas. |
637
+ | Permissions | Read/write/destructive confirmations match annotations and workspace policy. |
638
+ | Security | Cross-tenant, path traversal, prompt injection, token, scope, replay, secret, and PII tests. |
639
+ | Output | Every structured result matches `outputSchema`; no private-only payload leaks to model-visible content. |
640
+ | UI, if any | MCP Apps bridge, CSP, origin, accessibility, themes, resizing, state restore, and mobile layouts. |
641
+ | Submission | Portal scan clean; five positive and three negative cases reproducible with reviewer credentials. |
642
+
643
+ ### Repository checks for each implementation item
644
+
645
+ At minimum, link and run the checks appropriate to the changed files:
646
+
647
+ ```bash
648
+ pnpm build
649
+ node scripts/run-tests.mjs test -- <focused-tests>
650
+ pnpm quality:docs-skills
651
+ pnpm quality:static
652
+ pm validate --check-resolution --check-history-drift
653
+ pm health --check-only
654
+ ```
655
+
656
+ Broader runtime, packaging, security, coverage, and release gates are required before distribution or submission.
657
+
658
+ ## File-by-File Implementation Sequence
659
+
660
+ No files in this section were changed by the research task.
661
+
662
+ ### Phase 0 — architecture decision
663
+
664
+ - Add a `Decision` child under [pm-95d7](../.agents/pm/features/pm-95d7.toon).
665
+ - Select local-only, tunnel-backed private app, hosted public app, or an ordered combination.
666
+ - Define repository identity, storage, authorization, subprocess, Git, and data-retention boundaries.
667
+ - Record explicit non-goals and public-surface claims.
668
+
669
+ ### Phase 1 — self-contained Codex runtime
670
+
671
+ Likely files:
672
+
673
+ - `scripts/gen-plugin-mcp-wrappers.mjs` or a replacement bundle generator;
674
+ - build/release scripts that create the plugin runtime;
675
+ - `plugins/pm-codex/.mcp.json`;
676
+ - `plugins/pm-codex/scripts/pm-mcp-server.mjs`;
677
+ - a new plugin-local runtime artifact;
678
+ - cache-layout smoke tests; and
679
+ - package/version synchronization tests.
680
+
681
+ Coordinate shared launcher work with the existing Claude plugin distribution issue rather than duplicating
682
+ fallback logic.
683
+
684
+ ### Phase 2 — plugin contract cleanup
685
+
686
+ Likely files:
687
+
688
+ - each `plugins/pm-codex/skills/*/agents/openai.yaml` and its assets;
689
+ - `plugins/pm-codex/commands/*` migrated or removed;
690
+ - `.codex-plugin/plugin.json` metadata and production assets;
691
+ - `plugins/pm-codex/README.md` and `docs/CODEX_PLUGIN.md`; and
692
+ - a dedicated Codex plugin contract test using the built-in validator.
693
+
694
+ ### Phase 3 — app-safe tool contract
695
+
696
+ Likely files:
697
+
698
+ - `src/mcp/tool-definitions.ts` or a separate app descriptor projection;
699
+ - shared tool result schemas;
700
+ - a transport-neutral handler layer;
701
+ - focused app-only tools that exclude `pm_run` and unsafe mixed operations; and
702
+ - descriptor/output/annotation contract snapshots.
703
+
704
+ Preserve local MCP compatibility. Do not force the public app surface to expose every local operator command.
705
+
706
+ ### Phase 4 — ChatGPT app transport
707
+
708
+ Only after Phase 0 approval:
709
+
710
+ - add an HTTP/tunnel adapter around the shared handler layer;
711
+ - add authenticated repository context resolution;
712
+ - add OAuth/resource metadata when required;
713
+ - add developer-mode app wiring through `@plugin-creator`;
714
+ - add optional MCP UI resources only when justified; and
715
+ - add deploy, observability, security, and incident runbooks appropriate to the chosen architecture.
716
+
717
+ ### Phase 5 — distribution and submission
718
+
719
+ - choose pinned Git or prebuilt npm plugin distribution;
720
+ - verify cache installation on supported clients;
721
+ - finalize listing, support, privacy, terms, branding, prompts, and regions;
722
+ - prepare reviewer accounts and eight required cases;
723
+ - scan, remediate, and submit through the Platform portal; and
724
+ - publish only after approval and a final production-head verification.
725
+
726
+ ## pm Execution Model
727
+
728
+ The research task created only the parent feature and this documentation child. Create future children only when
729
+ implementation is approved; search all statuses before each creation.
730
+
731
+ Recommended future child types:
732
+
733
+ 1. `Decision` — choose local, tunnel, hosted, and public-distribution scope.
734
+ 2. `Issue` — make cached Codex installs self-contained and version-coherent.
735
+ 3. `Chore` — repair skill assets and migrate unsupported command payload.
736
+ 4. `Feature` — add app-safe schemas, annotations, and focused tools.
737
+ 5. `Feature` — add the approved ChatGPT MCP transport and authentication model.
738
+ 6. `Task` — developer-mode, security, cross-client, and submission verification.
739
+
740
+ For every child:
741
+
742
+ ```bash
743
+ pm context --limit 10
744
+ pm search "<exact scope>" --status all --limit 20
745
+ pm create --create-mode progressive --parent pm-95d7 ...
746
+ pm claim <id>
747
+ pm update <id> --status in_progress --message "Start approved implementation"
748
+ pm files <id> --add path=<path>,scope=project,note="<why>"
749
+ pm docs <id> --add path=<path>,scope=project,note="<why>"
750
+ pm test <id> --add command="<sandbox-safe command>",scope=project,timeout_seconds=<n>
751
+ pm comments <id> "Evidence: <exact current-head proof>"
752
+ pm close <id> "<acceptance and verification summary>" --validate-close warn
753
+ pm release <id>
754
+ ```
755
+
756
+ Only claim the children actively being edited. Keep the parent open until every accepted track is complete or an
757
+ ADR explicitly removes it from scope.
758
+
759
+ ## Definition of Done
760
+
761
+ Do not call the work “fully native ChatGPT/Codex” until all selected claims have matching proof:
762
+
763
+ - **Native Codex plugin:** official validator passes; cached plugin starts its own version-matched server without
764
+ `@latest`; skills and tools load in a fresh session; cross-platform cache tests pass.
765
+ - **ChatGPT-compatible app:** ChatGPT reaches the selected repository through approved HTTPS/tunnel transport;
766
+ auth, schemas, annotations, outputs, permissions, security, and golden prompts pass.
767
+ - **Public plugin:** identity, legal/listing metadata, domain, reviewer tests, portal scan, review, and publication
768
+ are complete on the production artifact.
769
+ - **Documentation:** every supported surface, prerequisite, limitation, install/update path, data boundary, and
770
+ version is described without conflating plugin, app, MCP server, skill, or marketplace.
771
+
772
+ Until then, the accurate short description is:
773
+
774
+ > pm-cli ships a working repo-marketplace Codex plugin whose installed runtime and optional ChatGPT app/public
775
+ > distribution tracks still require the remediation planned in pm-95d7.