@unbrained/pm-cli 2026.5.14 → 2026.5.24

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 +4 -4
  2. package/AGENTS.md +78 -457
  3. package/CHANGELOG.md +71 -0
  4. package/CONTRIBUTING.md +1 -0
  5. package/README.md +8 -6
  6. package/dist/cli/argv-utils.js +4 -1
  7. package/dist/cli/argv-utils.js.map +1 -1
  8. package/dist/cli/bootstrap-args.js +4 -1
  9. package/dist/cli/bootstrap-args.js.map +1 -1
  10. package/dist/cli/commander-usage.js +19 -1
  11. package/dist/cli/commander-usage.js.map +1 -1
  12. package/dist/cli/commands/activity.js +4 -1
  13. package/dist/cli/commands/activity.js.map +1 -1
  14. package/dist/cli/commands/aggregate.js +5 -2
  15. package/dist/cli/commands/aggregate.js.map +1 -1
  16. package/dist/cli/commands/annotation-command.d.ts +49 -0
  17. package/dist/cli/commands/annotation-command.js +135 -0
  18. package/dist/cli/commands/annotation-command.js.map +1 -0
  19. package/dist/cli/commands/append.js +5 -6
  20. package/dist/cli/commands/append.js.map +1 -1
  21. package/dist/cli/commands/calendar.js +5 -5
  22. package/dist/cli/commands/calendar.js.map +1 -1
  23. package/dist/cli/commands/claim.d.ts +3 -0
  24. package/dist/cli/commands/claim.js +29 -23
  25. package/dist/cli/commands/claim.js.map +1 -1
  26. package/dist/cli/commands/close.js +63 -8
  27. package/dist/cli/commands/close.js.map +1 -1
  28. package/dist/cli/commands/comments-audit.js +4 -1
  29. package/dist/cli/commands/comments-audit.js.map +1 -1
  30. package/dist/cli/commands/comments.d.ts +5 -0
  31. package/dist/cli/commands/comments.js +29 -116
  32. package/dist/cli/commands/comments.js.map +1 -1
  33. package/dist/cli/commands/completion.js +198 -15
  34. package/dist/cli/commands/completion.js.map +1 -1
  35. package/dist/cli/commands/config.js +4 -1
  36. package/dist/cli/commands/config.js.map +1 -1
  37. package/dist/cli/commands/context.js +21 -13
  38. package/dist/cli/commands/context.js.map +1 -1
  39. package/dist/cli/commands/contracts.d.ts +9 -0
  40. package/dist/cli/commands/contracts.js +314 -64
  41. package/dist/cli/commands/contracts.js.map +1 -1
  42. package/dist/cli/commands/create.js +77 -48
  43. package/dist/cli/commands/create.js.map +1 -1
  44. package/dist/cli/commands/dedupe-audit.js +9 -3
  45. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  46. package/dist/cli/commands/delete.d.ts +3 -0
  47. package/dist/cli/commands/delete.js +11 -7
  48. package/dist/cli/commands/delete.js.map +1 -1
  49. package/dist/cli/commands/deps.js +4 -1
  50. package/dist/cli/commands/deps.js.map +1 -1
  51. package/dist/cli/commands/docs.d.ts +1 -0
  52. package/dist/cli/commands/docs.js +6 -7
  53. package/dist/cli/commands/docs.js.map +1 -1
  54. package/dist/cli/commands/event-validation-messages.d.ts +3 -0
  55. package/dist/cli/commands/event-validation-messages.js +44 -0
  56. package/dist/cli/commands/event-validation-messages.js.map +1 -0
  57. package/dist/cli/commands/extension.d.ts +3 -1
  58. package/dist/cli/commands/extension.js +259 -52
  59. package/dist/cli/commands/extension.js.map +1 -1
  60. package/dist/cli/commands/files.js +8 -12
  61. package/dist/cli/commands/files.js.map +1 -1
  62. package/dist/cli/commands/gc.js +19 -3
  63. package/dist/cli/commands/gc.js.map +1 -1
  64. package/dist/cli/commands/get.d.ts +10 -5
  65. package/dist/cli/commands/get.js +135 -20
  66. package/dist/cli/commands/get.js.map +1 -1
  67. package/dist/cli/commands/guide.js +6 -8
  68. package/dist/cli/commands/guide.js.map +1 -1
  69. package/dist/cli/commands/health.d.ts +14 -0
  70. package/dist/cli/commands/health.js +269 -67
  71. package/dist/cli/commands/health.js.map +1 -1
  72. package/dist/cli/commands/history-redact.d.ts +50 -0
  73. package/dist/cli/commands/history-redact.js +476 -0
  74. package/dist/cli/commands/history-redact.js.map +1 -0
  75. package/dist/cli/commands/history-repair.d.ts +33 -0
  76. package/dist/cli/commands/history-repair.js +166 -0
  77. package/dist/cli/commands/history-repair.js.map +1 -0
  78. package/dist/cli/commands/history.d.ts +4 -0
  79. package/dist/cli/commands/history.js +12 -79
  80. package/dist/cli/commands/history.js.map +1 -1
  81. package/dist/cli/commands/index.d.ts +5 -1
  82. package/dist/cli/commands/index.js +9 -2
  83. package/dist/cli/commands/index.js.map +1 -1
  84. package/dist/cli/commands/init-agent-guidance.d.ts +31 -0
  85. package/dist/cli/commands/init-agent-guidance.js +336 -0
  86. package/dist/cli/commands/init-agent-guidance.js.map +1 -0
  87. package/dist/cli/commands/init.d.ts +42 -0
  88. package/dist/cli/commands/init.js +96 -1
  89. package/dist/cli/commands/init.js.map +1 -1
  90. package/dist/cli/commands/learnings.js +22 -118
  91. package/dist/cli/commands/learnings.js.map +1 -1
  92. package/dist/cli/commands/linked-test-entry.d.ts +3 -0
  93. package/dist/cli/commands/linked-test-entry.js +62 -0
  94. package/dist/cli/commands/linked-test-entry.js.map +1 -0
  95. package/dist/cli/commands/list.d.ts +1 -0
  96. package/dist/cli/commands/list.js +72 -38
  97. package/dist/cli/commands/list.js.map +1 -1
  98. package/dist/cli/commands/metadata-normalizers.js +4 -1
  99. package/dist/cli/commands/metadata-normalizers.js.map +1 -1
  100. package/dist/cli/commands/normalize.js +4 -1
  101. package/dist/cli/commands/normalize.js.map +1 -1
  102. package/dist/cli/commands/notes.js +22 -118
  103. package/dist/cli/commands/notes.js.map +1 -1
  104. package/dist/cli/commands/plan.d.ts +121 -0
  105. package/dist/cli/commands/plan.js +1137 -0
  106. package/dist/cli/commands/plan.js.map +1 -0
  107. package/dist/cli/commands/reindex.js +4 -1
  108. package/dist/cli/commands/reindex.js.map +1 -1
  109. package/dist/cli/commands/restore.js +9 -49
  110. package/dist/cli/commands/restore.js.map +1 -1
  111. package/dist/cli/commands/schema.d.ts +31 -0
  112. package/dist/cli/commands/schema.js +98 -0
  113. package/dist/cli/commands/schema.js.map +1 -0
  114. package/dist/cli/commands/search.js +156 -40
  115. package/dist/cli/commands/search.js.map +1 -1
  116. package/dist/cli/commands/stats.js +4 -1
  117. package/dist/cli/commands/stats.js.map +1 -1
  118. package/dist/cli/commands/templates.d.ts +4 -0
  119. package/dist/cli/commands/templates.js +91 -16
  120. package/dist/cli/commands/templates.js.map +1 -1
  121. package/dist/cli/commands/test-all.js +6 -7
  122. package/dist/cli/commands/test-all.js.map +1 -1
  123. package/dist/cli/commands/test-runs.js +4 -1
  124. package/dist/cli/commands/test-runs.js.map +1 -1
  125. package/dist/cli/commands/test.d.ts +1 -0
  126. package/dist/cli/commands/test.js +9 -9
  127. package/dist/cli/commands/test.js.map +1 -1
  128. package/dist/cli/commands/update-many.js +6 -7
  129. package/dist/cli/commands/update-many.js.map +1 -1
  130. package/dist/cli/commands/update.js +204 -103
  131. package/dist/cli/commands/update.js.map +1 -1
  132. package/dist/cli/commands/upgrade.js +6 -3
  133. package/dist/cli/commands/upgrade.js.map +1 -1
  134. package/dist/cli/commands/validate.d.ts +3 -1
  135. package/dist/cli/commands/validate.js +44 -64
  136. package/dist/cli/commands/validate.js.map +1 -1
  137. package/dist/cli/error-guidance.js +99 -6
  138. package/dist/cli/error-guidance.js.map +1 -1
  139. package/dist/cli/extension-command-help.d.ts +0 -1
  140. package/dist/cli/extension-command-help.js +4 -12
  141. package/dist/cli/extension-command-help.js.map +1 -1
  142. package/dist/cli/extension-command-options.d.ts +1 -0
  143. package/dist/cli/extension-command-options.js +108 -6
  144. package/dist/cli/extension-command-options.js.map +1 -1
  145. package/dist/cli/guide-topics.js +4 -1
  146. package/dist/cli/guide-topics.js.map +1 -1
  147. package/dist/cli/help-content.d.ts +0 -1
  148. package/dist/cli/help-content.js +46 -22
  149. package/dist/cli/help-content.js.map +1 -1
  150. package/dist/cli/help-json-payload.d.ts +1 -0
  151. package/dist/cli/help-json-payload.js +35 -2
  152. package/dist/cli/help-json-payload.js.map +1 -1
  153. package/dist/cli/main.js +214 -30
  154. package/dist/cli/main.js.map +1 -1
  155. package/dist/cli/migration-gates.js +4 -1
  156. package/dist/cli/migration-gates.js.map +1 -1
  157. package/dist/cli/register-list-query.d.ts +1 -1
  158. package/dist/cli/register-list-query.js +75 -29
  159. package/dist/cli/register-list-query.js.map +1 -1
  160. package/dist/cli/register-mutation.d.ts +1 -1
  161. package/dist/cli/register-mutation.js +430 -38
  162. package/dist/cli/register-mutation.js.map +1 -1
  163. package/dist/cli/register-operations.js +47 -10
  164. package/dist/cli/register-operations.js.map +1 -1
  165. package/dist/cli/register-setup.js +47 -25
  166. package/dist/cli/register-setup.js.map +1 -1
  167. package/dist/cli/registration-helpers.d.ts +0 -2
  168. package/dist/cli/registration-helpers.js +21 -40
  169. package/dist/cli/registration-helpers.js.map +1 -1
  170. package/dist/cli/shared-parsers.js +4 -1
  171. package/dist/cli/shared-parsers.js.map +1 -1
  172. package/dist/cli/telemetry-flush.js +4 -1
  173. package/dist/cli/telemetry-flush.js.map +1 -1
  174. package/dist/cli.js +65 -3
  175. package/dist/cli.js.map +1 -1
  176. package/dist/core/extensions/extension-types.js +4 -1
  177. package/dist/core/extensions/extension-types.js.map +1 -1
  178. package/dist/core/extensions/index.d.ts +0 -1
  179. package/dist/core/extensions/index.js +4 -13
  180. package/dist/core/extensions/index.js.map +1 -1
  181. package/dist/core/extensions/item-fields.js +4 -1
  182. package/dist/core/extensions/item-fields.js.map +1 -1
  183. package/dist/core/extensions/loader.js +78 -60
  184. package/dist/core/extensions/loader.js.map +1 -1
  185. package/dist/core/extensions/runtime-registrations.js +4 -1
  186. package/dist/core/extensions/runtime-registrations.js.map +1 -1
  187. package/dist/core/fs/fs-utils.js +4 -1
  188. package/dist/core/fs/fs-utils.js.map +1 -1
  189. package/dist/core/fs/index.js +4 -1
  190. package/dist/core/fs/index.js.map +1 -1
  191. package/dist/core/fs/path-utils.d.ts +1 -0
  192. package/dist/core/fs/path-utils.js +12 -0
  193. package/dist/core/fs/path-utils.js.map +1 -0
  194. package/dist/core/history/drift-scan.d.ts +11 -0
  195. package/dist/core/history/drift-scan.js +67 -0
  196. package/dist/core/history/drift-scan.js.map +1 -0
  197. package/dist/core/history/history-stream-policy.js +4 -1
  198. package/dist/core/history/history-stream-policy.js.map +1 -1
  199. package/dist/core/history/history.js +4 -1
  200. package/dist/core/history/history.js.map +1 -1
  201. package/dist/core/history/index.js +4 -1
  202. package/dist/core/history/index.js.map +1 -1
  203. package/dist/core/history/replay.d.ts +82 -0
  204. package/dist/core/history/replay.js +249 -0
  205. package/dist/core/history/replay.js.map +1 -0
  206. package/dist/core/item/id.js +4 -1
  207. package/dist/core/item/id.js.map +1 -1
  208. package/dist/core/item/index.js +4 -1
  209. package/dist/core/item/index.js.map +1 -1
  210. package/dist/core/item/item-format.js +250 -8
  211. package/dist/core/item/item-format.js.map +1 -1
  212. package/dist/core/item/item-type-definition.d.ts +52 -0
  213. package/dist/core/item/item-type-definition.js +123 -0
  214. package/dist/core/item/item-type-definition.js.map +1 -0
  215. package/dist/core/item/parent-reference-policy.js +4 -1
  216. package/dist/core/item/parent-reference-policy.js.map +1 -1
  217. package/dist/core/item/parse.js +34 -3
  218. package/dist/core/item/parse.js.map +1 -1
  219. package/dist/core/item/priority.d.ts +23 -0
  220. package/dist/core/item/priority.js +55 -0
  221. package/dist/core/item/priority.js.map +1 -0
  222. package/dist/core/item/sprint-release-format.js +4 -1
  223. package/dist/core/item/sprint-release-format.js.map +1 -1
  224. package/dist/core/item/status.d.ts +14 -1
  225. package/dist/core/item/status.js +24 -1
  226. package/dist/core/item/status.js.map +1 -1
  227. package/dist/core/item/toon-decode.d.ts +19 -0
  228. package/dist/core/item/toon-decode.js +69 -0
  229. package/dist/core/item/toon-decode.js.map +1 -0
  230. package/dist/core/item/type-registry.js +15 -83
  231. package/dist/core/item/type-registry.js.map +1 -1
  232. package/dist/core/lock/index.js +4 -1
  233. package/dist/core/lock/index.js.map +1 -1
  234. package/dist/core/lock/lock.js +4 -1
  235. package/dist/core/lock/lock.js.map +1 -1
  236. package/dist/core/output/output.d.ts +4 -0
  237. package/dist/core/output/output.js +47 -6
  238. package/dist/core/output/output.js.map +1 -1
  239. package/dist/core/packages/manifest.d.ts +1 -0
  240. package/dist/core/packages/manifest.js +6 -8
  241. package/dist/core/packages/manifest.js.map +1 -1
  242. package/dist/core/packages/root.d.ts +3 -0
  243. package/dist/core/packages/root.js +51 -0
  244. package/dist/core/packages/root.js.map +1 -0
  245. package/dist/core/schema/item-types-file.d.ts +85 -0
  246. package/dist/core/schema/item-types-file.js +243 -0
  247. package/dist/core/schema/item-types-file.js.map +1 -0
  248. package/dist/core/schema/runtime-field-filters.js +4 -1
  249. package/dist/core/schema/runtime-field-filters.js.map +1 -1
  250. package/dist/core/schema/runtime-field-values.js +4 -1
  251. package/dist/core/schema/runtime-field-values.js.map +1 -1
  252. package/dist/core/schema/runtime-schema.d.ts +2 -1
  253. package/dist/core/schema/runtime-schema.js +13 -8
  254. package/dist/core/schema/runtime-schema.js.map +1 -1
  255. package/dist/core/search/cache.js +7 -2
  256. package/dist/core/search/cache.js.map +1 -1
  257. package/dist/core/search/corpus.d.ts +2 -0
  258. package/dist/core/search/corpus.js +77 -2
  259. package/dist/core/search/corpus.js.map +1 -1
  260. package/dist/core/search/embedding-batches.js +21 -7
  261. package/dist/core/search/embedding-batches.js.map +1 -1
  262. package/dist/core/search/http-client.js +4 -1
  263. package/dist/core/search/http-client.js.map +1 -1
  264. package/dist/core/search/providers.js +4 -1
  265. package/dist/core/search/providers.js.map +1 -1
  266. package/dist/core/search/semantic-defaults.js +12 -3
  267. package/dist/core/search/semantic-defaults.js.map +1 -1
  268. package/dist/core/search/vector-stores.js +4 -1
  269. package/dist/core/search/vector-stores.js.map +1 -1
  270. package/dist/core/sentry/helpers.js +4 -1
  271. package/dist/core/sentry/helpers.js.map +1 -1
  272. package/dist/core/sentry/instrument.js +10 -13
  273. package/dist/core/sentry/instrument.js.map +1 -1
  274. package/dist/core/shared/author.d.ts +1 -0
  275. package/dist/core/shared/author.js +9 -0
  276. package/dist/core/shared/author.js.map +1 -0
  277. package/dist/core/shared/command-types.js +4 -1
  278. package/dist/core/shared/command-types.js.map +1 -1
  279. package/dist/core/shared/conflict-markers.js +4 -1
  280. package/dist/core/shared/conflict-markers.js.map +1 -1
  281. package/dist/core/shared/constants.d.ts +2 -2
  282. package/dist/core/shared/constants.js +24 -1
  283. package/dist/core/shared/constants.js.map +1 -1
  284. package/dist/core/shared/errors.js +4 -1
  285. package/dist/core/shared/errors.js.map +1 -1
  286. package/dist/core/shared/index.js +4 -1
  287. package/dist/core/shared/index.js.map +1 -1
  288. package/dist/core/shared/lazy-module.d.ts +1 -0
  289. package/dist/core/shared/lazy-module.js +11 -0
  290. package/dist/core/shared/lazy-module.js.map +1 -0
  291. package/dist/core/shared/levenshtein.js +4 -1
  292. package/dist/core/shared/levenshtein.js.map +1 -1
  293. package/dist/core/shared/option-alias-visibility.d.ts +44 -0
  294. package/dist/core/shared/option-alias-visibility.js +76 -0
  295. package/dist/core/shared/option-alias-visibility.js.map +1 -0
  296. package/dist/core/shared/primitives.js +4 -1
  297. package/dist/core/shared/primitives.js.map +1 -1
  298. package/dist/core/shared/serialization.js +4 -1
  299. package/dist/core/shared/serialization.js.map +1 -1
  300. package/dist/core/shared/text-normalization.d.ts +0 -1
  301. package/dist/core/shared/text-normalization.js +4 -4
  302. package/dist/core/shared/text-normalization.js.map +1 -1
  303. package/dist/core/shared/time.js +4 -1
  304. package/dist/core/shared/time.js.map +1 -1
  305. package/dist/core/store/front-matter-cache.js +8 -3
  306. package/dist/core/store/front-matter-cache.js.map +1 -1
  307. package/dist/core/store/index.js +4 -1
  308. package/dist/core/store/index.js.map +1 -1
  309. package/dist/core/store/item-format-migration.js +4 -1
  310. package/dist/core/store/item-format-migration.js.map +1 -1
  311. package/dist/core/store/item-store.d.ts +4 -0
  312. package/dist/core/store/item-store.js +133 -39
  313. package/dist/core/store/item-store.js.map +1 -1
  314. package/dist/core/store/paths.js +4 -1
  315. package/dist/core/store/paths.js.map +1 -1
  316. package/dist/core/store/settings-validator.d.ts +106 -0
  317. package/dist/core/store/settings-validator.js +279 -0
  318. package/dist/core/store/settings-validator.js.map +1 -0
  319. package/dist/core/store/settings.js +32 -331
  320. package/dist/core/store/settings.js.map +1 -1
  321. package/dist/core/telemetry/consent.js +4 -1
  322. package/dist/core/telemetry/consent.js.map +1 -1
  323. package/dist/core/telemetry/observability.d.ts +1 -1
  324. package/dist/core/telemetry/observability.js +11 -2
  325. package/dist/core/telemetry/observability.js.map +1 -1
  326. package/dist/core/telemetry/runtime.js +34 -6
  327. package/dist/core/telemetry/runtime.js.map +1 -1
  328. package/dist/core/test/background-runs.js +4 -1
  329. package/dist/core/test/background-runs.js.map +1 -1
  330. package/dist/core/test/item-test-run-tracking.js +4 -1
  331. package/dist/core/test/item-test-run-tracking.js.map +1 -1
  332. package/dist/mcp/server.js +182 -22
  333. package/dist/mcp/server.js.map +1 -1
  334. package/dist/sdk/cli-contracts/commander-mutation-options.js +10 -3
  335. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
  336. package/dist/sdk/cli-contracts/commander-types.js +4 -1
  337. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  338. package/dist/sdk/cli-contracts.d.ts +13 -2
  339. package/dist/sdk/cli-contracts.js +410 -26
  340. package/dist/sdk/cli-contracts.js.map +1 -1
  341. package/dist/sdk/index.js +4 -1
  342. package/dist/sdk/index.js.map +1 -1
  343. package/dist/sdk/runtime.d.ts +25 -1
  344. package/dist/sdk/runtime.js +48 -2
  345. package/dist/sdk/runtime.js.map +1 -1
  346. package/dist/types/index.js +4 -1
  347. package/dist/types/index.js.map +1 -1
  348. package/dist/types.d.ts +92 -2
  349. package/dist/types.js +42 -1
  350. package/dist/types.js.map +1 -1
  351. package/docs/AGENT_GUIDE.md +23 -7
  352. package/docs/ARCHITECTURE.md +1 -1
  353. package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
  354. package/docs/CODEX_PLUGIN.md +2 -2
  355. package/docs/COMMANDS.md +117 -12
  356. package/docs/CONFIGURATION.md +5 -2
  357. package/docs/EXTENSIONS.md +158 -814
  358. package/docs/QUICKSTART.md +11 -5
  359. package/docs/README.md +7 -6
  360. package/docs/RELEASING.md +13 -9
  361. package/docs/SDK.md +11 -2
  362. package/docs/TESTING.md +2 -2
  363. package/marketplace.json +3 -3
  364. package/package.json +15 -12
  365. package/packages/pm-beads/package.json +1 -1
  366. package/packages/pm-calendar/README.md +4 -2
  367. package/packages/pm-calendar/extensions/calendar/index.js +22 -3
  368. package/packages/pm-calendar/extensions/calendar/index.ts +22 -3
  369. package/packages/pm-calendar/extensions/calendar/runtime.js +26 -7
  370. package/packages/pm-calendar/extensions/calendar/runtime.ts +26 -7
  371. package/packages/pm-calendar/package.json +1 -1
  372. package/packages/pm-governance-audit/package.json +1 -1
  373. package/packages/pm-guide-shell/extensions/guide-shell/index.js +1 -1
  374. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +1 -1
  375. package/packages/pm-guide-shell/package.json +1 -1
  376. package/packages/pm-linked-test-adapters/package.json +1 -1
  377. package/packages/pm-search-advanced/README.md +8 -0
  378. package/packages/pm-search-advanced/extensions/search-advanced/index.js +74 -0
  379. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +75 -1
  380. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +67 -9
  381. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +67 -9
  382. package/packages/pm-search-advanced/package.json +1 -1
  383. package/packages/pm-templates/README.md +1 -1
  384. package/packages/pm-templates/extensions/templates/runtime.js +11 -202
  385. package/packages/pm-templates/extensions/templates/runtime.ts +38 -230
  386. package/packages/pm-templates/package.json +1 -1
  387. package/packages/pm-todos/package.json +1 -1
  388. package/plugins/{pm-cli-claude → pm-claude}/.claude-plugin/plugin.json +2 -2
  389. package/plugins/{pm-cli-claude → pm-claude}/.mcp.json +1 -1
  390. package/plugins/{pm-cli-claude → pm-claude}/README.md +4 -4
  391. package/plugins/{pm-cli-claude → pm-claude}/agents/pm-coordinator.md +1 -1
  392. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-init.md +10 -1
  393. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-planner.md +18 -0
  394. package/plugins/{pm-cli-claude → pm-claude}/skills/pm-planner/SKILL.md +46 -1
  395. package/plugins/{pm-cli-codex → pm-codex}/.codex-plugin/plugin.json +3 -3
  396. package/plugins/{pm-cli-codex → pm-codex}/.mcp.json +1 -1
  397. package/plugins/{pm-cli-codex → pm-codex}/README.md +7 -4
  398. package/plugins/pm-codex/skills/pm-native/SKILL.md +81 -0
  399. package/scripts/finalize-build.mjs +28 -0
  400. package/scripts/prepare-build-cache.mjs +37 -0
  401. package/dist/core/output/command-aware.d.ts +0 -1
  402. package/dist/core/output/command-aware.js +0 -394
  403. package/dist/core/output/command-aware.js.map +0 -1
  404. package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +0 -57
  405. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-delivery-chain.md +0 -0
  406. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-triage-agent.md +0 -0
  407. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-verification-agent.md +0 -0
  408. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-audit.md +0 -0
  409. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-calendar.md +0 -0
  410. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-close-task.md +0 -0
  411. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-developer.md +0 -0
  412. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-list.md +0 -0
  413. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-new.md +0 -0
  414. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-release.md +0 -0
  415. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-search.md +0 -0
  416. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-start-task.md +0 -0
  417. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-status.md +0 -0
  418. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-triage.md +0 -0
  419. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-workflow.md +0 -0
  420. /package/plugins/{pm-cli-claude → pm-claude}/hooks/hooks.json +0 -0
  421. /package/plugins/{pm-cli-claude → pm-claude}/hooks/session-start.mjs +0 -0
  422. /package/plugins/{pm-cli-claude → pm-claude}/scripts/pm-mcp-server.mjs +0 -0
  423. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-audit/SKILL.md +0 -0
  424. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-developer/SKILL.md +0 -0
  425. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-release/SKILL.md +0 -0
  426. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-workflow/SKILL.md +0 -0
  427. /package/plugins/{pm-cli-codex → pm-codex}/assets/pm-cli-small.svg +0 -0
  428. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-audit.md +0 -0
  429. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-close-task.md +0 -0
  430. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-start-task.md +0 -0
  431. /package/plugins/{pm-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +0 -0
  432. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/SKILL.md +0 -0
  433. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/agents/openai.yaml +0 -0
  434. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-native/agents/openai.yaml +0 -0
  435. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/SKILL.md +0 -0
  436. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/agents/openai.yaml +0 -0
package/dist/cli/main.js CHANGED
@@ -1,10 +1,12 @@
1
1
  #!/usr/bin/env node
2
+
3
+ !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]="bb46ecaf-3f2f-526b-b6fa-4d87511ede62")}catch(e){}}();
2
4
  import fs from "node:fs";
3
5
  import path from "node:path";
4
- import { fileURLToPath } from "node:url";
5
6
  import { Command } from "commander";
6
7
  import { activateExtensions, clearActiveExtensionHooks, getActiveCommandResult, getActiveExtensionRegistrations, loadExtensions, runActiveCommandHandler, runActiveParserOverride, runActivePreflightOverride, runAfterCommandHooks, runBeforeCommandHooks, setActiveCommandResult, setActiveCommandContext, setActiveExtensionCommands, setActiveExtensionHooks, setActiveExtensionParsers, setActiveExtensionPreflight, setActiveExtensionRegistrations, setActiveExtensionRenderers, setActiveExtensionServices, } from "../core/extensions/index.js";
7
8
  import { pathExists } from "../core/fs/fs-utils.js";
9
+ import { resolvePmPackageRootFromModule } from "../core/packages/root.js";
8
10
  import { resolveItemTypeRegistry, } from "../core/item/type-registry.js";
9
11
  import { resolveRuntimeFieldRegistry, } from "../core/schema/runtime-schema.js";
10
12
  import { EXIT_CODE, resolveTelemetryErrorCategory } from "../core/shared/constants.js";
@@ -17,15 +19,12 @@ import { sentryCaptureCliError, sentryFinishCommandSpan, sentryFlush, sentryLogC
17
19
  import { ensureSentryInit } from "../core/sentry/instrument.js";
18
20
  import { getSettingsPath, resolvePmRoot } from "../core/store/paths.js";
19
21
  import { readSettings } from "../core/store/settings.js";
20
- import { coerceLooseCommandOptionsWithFlagDefinitions, parseLooseCommandOptions } from "./extension-command-options.js";
22
+ import { coerceLooseCommandOptionsWithFlagDefinitions, parseLooseCommandOptions, validateLooseCommandOptionsWithFlagDefinitions, } from "./extension-command-options.js";
21
23
  import { attachRichHelpText } from "./help-content.js";
22
24
  import { extractProvidedOptionFlags, normalizeLongOptionFlag, renderPmCommand, } from "./argv-utils.js";
23
25
  import { classifyCommanderError, classifyPmCliError, classifyUnknownError, formatPmCliErrorForDisplay, formatPmCliErrorForJson, formatUnknownErrorForJson, } from "./error-guidance.js";
24
26
  import { applyDefaultOutputFormat, clearResolvedGlobalOptions, collect, formatHookWarnings, getCommandPath, getGlobalOptions, invalidateSearchCachesForMutation, setResolvedGlobalOptions, } from "./registration-helpers.js";
25
- import { registerSetupCommands } from "./register-setup.js";
26
- import { registerListQueryCommands } from "./register-list-query.js";
27
- import { registerMutationCommands } from "./register-mutation.js";
28
- import { registerOperationCommands } from "./register-operations.js";
27
+ import { createLazyModule } from "../core/shared/lazy-module.js";
29
28
  import { normalizeExtensionCommandPath, collectDynamicExtensionFlagHelpByCommand, collectExtensionCommandHelpDescriptors, applyDynamicExtensionArguments, buildDynamicExtensionCommandMetadataHelp, findCommandByPath, ensureCommandPath, } from "./extension-command-help.js";
30
29
  import { parseBootstrapGlobalOptions, applyBootstrapPagerPolicy, parseBootstrapHelpRequest, parseBootstrapCommandName, normalizeBootstrapInvocation, } from "./bootstrap-args.js";
31
30
  import { collectMandatoryMigrationBlockers, enforceMandatoryMigrationWriteGate, enforceItemFormatWriteGateAndPreflightMigration, resolveMigrationId, resolveNormalizedMigrationStatus, } from "./migration-gates.js";
@@ -33,8 +32,7 @@ import { isKnownHelpCommandPath, formatCommanderUsageMessage, formatCommanderUsa
33
32
  import { maybeRenderBootstrapJsonHelp, attachCreateUpdatePolicyHelpText, } from "./help-json-payload.js";
34
33
  const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
35
34
  function resolvePmPackageRoot() {
36
- const mainPath = fileURLToPath(import.meta.url);
37
- return path.resolve(path.dirname(mainPath), "../..");
35
+ return resolvePmPackageRootFromModule(import.meta.url, ["../.."]);
38
36
  }
39
37
  if (typeof process.env[PM_PACKAGE_ROOT_ENV] !== "string" || process.env[PM_PACKAGE_ROOT_ENV]?.trim().length === 0) {
40
38
  process.env[PM_PACKAGE_ROOT_ENV] = resolvePmPackageRoot();
@@ -49,6 +47,8 @@ const TELEMETRY_COMMAND_RESOLUTION_SET = new Set([
49
47
  "missing_required_argument",
50
48
  "invalid_usage",
51
49
  "validation_failed",
50
+ "health_findings",
51
+ "validation_findings",
52
52
  "conflict",
53
53
  "runtime_failed",
54
54
  "unknown_failed",
@@ -57,6 +57,10 @@ const TELEMETRY_RESOLUTION_STAGE_SET = new Set(["parse", "preflight", "execute",
57
57
  const TELEMETRY_ERROR_CATEGORY_SET = new Set(["usage", "validation", "conflict", "runtime", "unknown"]);
58
58
  let runtimeExtensionSnapshotCache = null;
59
59
  let activeRuntimeExtensionCommandDescriptors = new Map();
60
+ const loadSetupRegistrationModule = createLazyModule(() => import("./register-setup.js"));
61
+ const loadListQueryRegistrationModule = createLazyModule(() => import("./register-list-query.js"));
62
+ const loadMutationRegistrationModule = createLazyModule(() => import("./register-mutation.js"));
63
+ const loadOperationRegistrationModule = createLazyModule(() => import("./register-operations.js"));
60
64
  function describeUnknownError(error) {
61
65
  if (error instanceof PmCliError) {
62
66
  return error.message;
@@ -80,28 +84,31 @@ function inferMissingFieldsFromErrorMessage(message) {
80
84
  function buildPmCliRecoveryContext(context, invocationArgv, rawMessage) {
81
85
  const attemptedCommand = renderAttemptedCommand(invocationArgv);
82
86
  const providedFields = extractProvidedOptionFlags(invocationArgv);
83
- const inferredMissing = inferMissingFieldsFromErrorMessage(rawMessage);
87
+ const providedSet = new Set(providedFields.map((flag) => normalizeLongOptionFlag(flag) ?? flag));
84
88
  const existingRecovery = context?.recovery;
89
+ const rawInferred = existingRecovery?.suggested_retry ? undefined : inferMissingFieldsFromErrorMessage(rawMessage);
90
+ const trulyMissing = rawInferred?.filter((flag) => !providedSet.has(normalizeLongOptionFlag(flag) ?? flag));
91
+ const inferredMissing = trulyMissing && trulyMissing.length > 0 ? trulyMissing : undefined;
85
92
  let suggestedRetry = existingRecovery?.suggested_retry;
86
93
  if (!suggestedRetry && inferredMissing && inferredMissing.length > 0) {
87
94
  const missingFlag = inferredMissing[0];
88
95
  const normalizedMissing = normalizeLongOptionFlag(missingFlag);
89
96
  if (normalizedMissing) {
90
- const alreadyProvided = invocationArgv.some((token) => normalizeLongOptionFlag(token) === normalizedMissing);
91
- if (!alreadyProvided) {
92
- suggestedRetry = renderAttemptedCommand([...invocationArgv, normalizedMissing, "<value>"]);
93
- }
97
+ suggestedRetry = renderAttemptedCommand([...invocationArgv, normalizedMissing, "<value>"]);
94
98
  }
95
99
  }
96
100
  if (!suggestedRetry) {
97
101
  suggestedRetry = attemptedCommand;
98
102
  }
103
+ if (suggestedRetry === attemptedCommand) {
104
+ suggestedRetry = undefined;
105
+ }
99
106
  const recovery = {
100
107
  attempted_command: existingRecovery?.attempted_command ?? attemptedCommand,
101
108
  normalized_args: existingRecovery?.normalized_args ?? [...invocationArgv],
102
109
  provided_fields: existingRecovery?.provided_fields ?? (providedFields.length > 0 ? providedFields : undefined),
103
110
  missing: existingRecovery?.missing ?? inferredMissing,
104
- suggested_retry: suggestedRetry,
111
+ ...(suggestedRetry ? { suggested_retry: suggestedRetry } : {}),
105
112
  };
106
113
  return {
107
114
  ...(context ?? {}),
@@ -240,8 +247,7 @@ function buildPostActionTelemetryOutcome() {
240
247
  : undefined;
241
248
  const resultExitCode = readRecordNumber(result, "exit_code", "exitCode");
242
249
  const exitCode = processExitCode ?? resultExitCode ?? EXIT_CODE.SUCCESS;
243
- const resultOk = readRecordBoolean(result, "ok");
244
- const ok = resultOk ?? exitCode === EXIT_CODE.SUCCESS;
250
+ const ok = exitCode === EXIT_CODE.SUCCESS;
245
251
  const errorCode = readRecordString(result, "error_code", "errorCode") ?? inferPostActionErrorCode(ok, exitCode);
246
252
  const errorCategory = normalizeTelemetryErrorCategory(readRecordString(result, "error_category", "errorCategory")) ??
247
253
  (!ok ? resolveTelemetryErrorCategory(errorCode) : undefined);
@@ -313,6 +319,9 @@ function extractCommandScopedOptions(command, commandArgs, extensionFlagDefiniti
313
319
  delete scoped.profile;
314
320
  delete scoped.pager;
315
321
  const looseOptions = parseLooseCommandOptions(commandArgs);
322
+ if (extensionFlagDefinitions.length > 0) {
323
+ validateLooseCommandOptionsWithFlagDefinitions(looseOptions, extensionFlagDefinitions, getCommandPath(command));
324
+ }
316
325
  for (const [key, value] of Object.entries(looseOptions)) {
317
326
  if (scoped[key] === undefined) {
318
327
  scoped[key] = value;
@@ -332,6 +341,22 @@ function collectExtensionFlagDefinitionsForCommand(registrations, commandPath) {
332
341
  .filter((entry) => normalizeExtensionCommandPath(entry.target_command) === normalizedCommandPath)
333
342
  .flatMap((entry) => entry.flags);
334
343
  }
344
+ function collectExtensionFlagDefinitionsForInvocation(registrations, commandPath, commandArgs) {
345
+ const exact = collectExtensionFlagDefinitionsForCommand(registrations, commandPath);
346
+ const pathParts = [commandPath];
347
+ let nestedMatch = [];
348
+ for (const arg of commandArgs) {
349
+ if (arg.startsWith("-")) {
350
+ break;
351
+ }
352
+ pathParts.push(arg);
353
+ const nested = collectExtensionFlagDefinitionsForCommand(registrations, pathParts.join(" "));
354
+ if (nested.length > 0) {
355
+ nestedMatch = nested;
356
+ }
357
+ }
358
+ return nestedMatch.length > 0 ? nestedMatch : exact;
359
+ }
335
360
  const RUNTIME_FIELD_COMMAND_BY_COMMAND_PATH = {
336
361
  create: "create",
337
362
  update: "update",
@@ -663,7 +688,7 @@ function wrapProgramActionsForExtensionHandlers(rootProgram) {
663
688
  let commandArgs = actionCommand.args.map(String);
664
689
  const activeRegistrations = getActiveExtensionRegistrations();
665
690
  const extensionFlagDefinitions = activeRegistrations
666
- ? collectExtensionFlagDefinitionsForCommand(activeRegistrations, commandPath)
691
+ ? collectExtensionFlagDefinitionsForInvocation(activeRegistrations, commandPath, commandArgs)
667
692
  : [];
668
693
  const runtimeFieldFlagDefinitions = await collectRuntimeFieldLooseFlagDefinitionsForCommand(commandPath, pmRoot);
669
694
  let commandOptions = extractCommandScopedOptions(actionCommand, commandArgs, [
@@ -715,7 +740,13 @@ function wrapProgramActionsForExtensionHandlers(rootProgram) {
715
740
  }
716
741
  if (extensionCommandResult.handled) {
717
742
  setActiveCommandResult(extensionCommandResult.result);
718
- printResult(extensionCommandResult.result, globalOptions);
743
+ printResult(extensionCommandResult.result, {
744
+ ...globalOptions,
745
+ command: commandPath,
746
+ commandArgs,
747
+ commandOptions,
748
+ pmRoot,
749
+ });
719
750
  if (globalOptions.profile) {
720
751
  printError(`profile:command=${commandPath} took_ms=${Date.now() - startedAt}`);
721
752
  }
@@ -789,14 +820,22 @@ async function registerDynamicExtensionCommandPaths(rootProgram, invocationArgv)
789
820
  dynamicCommand
790
821
  .allowUnknownOption(true)
791
822
  .allowExcessArguments(true)
792
- .action(async (_options, command) => {
823
+ .action(async (...actionArgs) => {
824
+ const maybeCommand = actionArgs[actionArgs.length - 1];
825
+ const command = maybeCommand instanceof Command ? maybeCommand : dynamicCommand;
793
826
  const globalOptions = getGlobalOptions(command);
794
827
  const startedAt = Date.now();
795
- const extensionFlagDefinitions = collectExtensionFlagDefinitionsForCommand(snapshot.registrations, commandPath);
828
+ const extensionFlagDefinitions = collectExtensionFlagDefinitionsForInvocation(snapshot.registrations, commandPath, command.args.map(String));
796
829
  const scopedOptions = extractCommandScopedOptions(command, command.args.map(String), extensionFlagDefinitions);
797
830
  const result = await runRequiredExtensionCommand(command, scopedOptions, globalOptions);
798
831
  await invalidateSearchCachesForMutation(globalOptions, result);
799
- printResult(result, globalOptions);
832
+ printResult(result, {
833
+ ...globalOptions,
834
+ command: commandPath,
835
+ commandArgs: command.args.map(String),
836
+ commandOptions: scopedOptions,
837
+ pmRoot,
838
+ });
800
839
  if (globalOptions.profile) {
801
840
  printError(`profile:command=${commandPath} took_ms=${Date.now() - startedAt}`);
802
841
  }
@@ -805,8 +844,7 @@ async function registerDynamicExtensionCommandPaths(rootProgram, invocationArgv)
805
844
  }
806
845
  function resolveCliVersion() {
807
846
  try {
808
- const currentFilePath = fileURLToPath(import.meta.url);
809
- const packageJsonPath = path.resolve(path.dirname(currentFilePath), "../../package.json");
847
+ const packageJsonPath = path.join(resolvePmPackageRoot(), "package.json");
810
848
  const raw = fs.readFileSync(packageJsonPath, "utf8");
811
849
  const parsed = JSON.parse(raw);
812
850
  return typeof parsed.version === "string" ? parsed.version : "0.0.0";
@@ -876,7 +914,7 @@ program.hook("preAction", async (_thisCommand, actionCommand) => {
876
914
  setActiveExtensionServices(runtimeExtensions.services);
877
915
  setActiveExtensionRenderers(runtimeExtensions.renderers);
878
916
  setActiveExtensionRegistrations(runtimeExtensions.registrations);
879
- const extensionFlagDefinitions = collectExtensionFlagDefinitionsForCommand(runtimeExtensions.registrations, commandPath);
917
+ const extensionFlagDefinitions = collectExtensionFlagDefinitionsForInvocation(runtimeExtensions.registrations, commandPath, commandArgs);
880
918
  commandOptions = extractCommandScopedOptions(actionCommand, commandArgs, extensionFlagDefinitions);
881
919
  const parserOverride = await runActiveParserOverride({
882
920
  command: commandPath,
@@ -970,11 +1008,73 @@ program.hook("postAction", async () => {
970
1008
  });
971
1009
  await runAndClearAfterCommandHooks(outcome);
972
1010
  });
973
- registerSetupCommands(program);
974
- registerListQueryCommands(program);
975
- registerMutationCommands(program);
976
- registerOperationCommands(program);
977
1011
  const VERSION_FLAG_TOKENS = new Set(["--version", "-V"]);
1012
+ const SETUP_COMMAND_NAMES = new Set([
1013
+ "config",
1014
+ "extension",
1015
+ "init",
1016
+ "install",
1017
+ "package",
1018
+ "packages",
1019
+ "templates",
1020
+ "upgrade",
1021
+ ]);
1022
+ const LIST_QUERY_COMMAND_NAMES = new Set([
1023
+ "activity",
1024
+ "aggregate",
1025
+ "context",
1026
+ "ctx",
1027
+ "get",
1028
+ "history",
1029
+ "list",
1030
+ "list-all",
1031
+ "list-blocked",
1032
+ "list-canceled",
1033
+ "list-closed",
1034
+ "list-draft",
1035
+ "list-in-progress",
1036
+ "list-open",
1037
+ "search",
1038
+ ]);
1039
+ const MUTATION_COMMAND_NAMES = new Set([
1040
+ "append",
1041
+ "close",
1042
+ "comments",
1043
+ "delete",
1044
+ "deps",
1045
+ "discover",
1046
+ "docs",
1047
+ "files",
1048
+ "learnings",
1049
+ "notes",
1050
+ "plan",
1051
+ "restore",
1052
+ "update",
1053
+ "update-many",
1054
+ "create",
1055
+ ]);
1056
+ const OPERATION_COMMAND_NAMES = new Set([
1057
+ "claim",
1058
+ "close-task",
1059
+ "contracts",
1060
+ "gc",
1061
+ "health",
1062
+ "pause-task",
1063
+ "release",
1064
+ "start-task",
1065
+ "stats",
1066
+ "test",
1067
+ "test-all",
1068
+ "test-runs",
1069
+ "test-runs-worker",
1070
+ "validate",
1071
+ ]);
1072
+ const REGISTER_ALL_CORE_COMMAND_FAMILIES = {
1073
+ setup: true,
1074
+ listQuery: true,
1075
+ mutation: true,
1076
+ operation: true,
1077
+ };
978
1078
  const RUNTIME_SCHEMA_FLAG_BOOTSTRAP_COMMANDS = new Set([
979
1079
  "create",
980
1080
  "update",
@@ -995,6 +1095,80 @@ const RUNTIME_SCHEMA_FLAG_BOOTSTRAP_COMMANDS = new Set([
995
1095
  function invocationRequestsVersion(invocationArgv) {
996
1096
  return invocationArgv.some((token) => VERSION_FLAG_TOKENS.has(token));
997
1097
  }
1098
+ function resolveCoreCommandRegistrationSelection(invocationArgv) {
1099
+ if (invocationRequestsVersion(invocationArgv)) {
1100
+ return {
1101
+ setup: false,
1102
+ listQuery: false,
1103
+ mutation: false,
1104
+ operation: false,
1105
+ };
1106
+ }
1107
+ if (invocationArgv.length === 0 ||
1108
+ parseBootstrapHelpRequest(invocationArgv).requested) {
1109
+ return REGISTER_ALL_CORE_COMMAND_FAMILIES;
1110
+ }
1111
+ const commandName = parseBootstrapCommandName(invocationArgv);
1112
+ if (!commandName) {
1113
+ return REGISTER_ALL_CORE_COMMAND_FAMILIES;
1114
+ }
1115
+ const normalizedCommand = commandName.trim().toLowerCase();
1116
+ if (SETUP_COMMAND_NAMES.has(normalizedCommand)) {
1117
+ return {
1118
+ setup: true,
1119
+ listQuery: false,
1120
+ mutation: false,
1121
+ operation: false,
1122
+ };
1123
+ }
1124
+ if (LIST_QUERY_COMMAND_NAMES.has(normalizedCommand)) {
1125
+ return {
1126
+ setup: false,
1127
+ listQuery: true,
1128
+ mutation: false,
1129
+ operation: false,
1130
+ };
1131
+ }
1132
+ if (MUTATION_COMMAND_NAMES.has(normalizedCommand)) {
1133
+ return {
1134
+ setup: false,
1135
+ listQuery: false,
1136
+ mutation: true,
1137
+ operation: false,
1138
+ };
1139
+ }
1140
+ if (OPERATION_COMMAND_NAMES.has(normalizedCommand)) {
1141
+ return {
1142
+ setup: false,
1143
+ listQuery: false,
1144
+ mutation: false,
1145
+ operation: true,
1146
+ };
1147
+ }
1148
+ return REGISTER_ALL_CORE_COMMAND_FAMILIES;
1149
+ }
1150
+ function shouldAttachRichHelpTextForInvocation(invocationArgv) {
1151
+ return (invocationArgv.length === 0 ||
1152
+ parseBootstrapHelpRequest(invocationArgv).requested);
1153
+ }
1154
+ async function registerCoreCommandFamilies(rootProgram, selection) {
1155
+ if (selection.setup) {
1156
+ const { registerSetupCommands } = await loadSetupRegistrationModule();
1157
+ registerSetupCommands(rootProgram);
1158
+ }
1159
+ if (selection.listQuery) {
1160
+ const { registerListQueryCommands } = await loadListQueryRegistrationModule();
1161
+ registerListQueryCommands(rootProgram);
1162
+ }
1163
+ if (selection.mutation) {
1164
+ const { registerMutationCommands } = await loadMutationRegistrationModule();
1165
+ registerMutationCommands(rootProgram);
1166
+ }
1167
+ if (selection.operation) {
1168
+ const { registerOperationCommands } = await loadOperationRegistrationModule();
1169
+ registerOperationCommands(rootProgram);
1170
+ }
1171
+ }
998
1172
  function isKnownTopLevelCommandOrAlias(rootProgram, commandName) {
999
1173
  const normalized = commandName.trim().toLowerCase();
1000
1174
  for (const command of rootProgram.commands) {
@@ -1032,12 +1206,17 @@ function shouldRegisterRuntimeSchemaFlags(invocationArgv) {
1032
1206
  return RUNTIME_SCHEMA_FLAG_BOOTSTRAP_COMMANDS.has(commandName);
1033
1207
  }
1034
1208
  const bootstrapInvocation = normalizeBootstrapInvocation(process.argv.slice(2));
1035
- attachRichHelpText(program, bootstrapInvocation.argv);
1036
1209
  async function main() {
1037
1210
  const invocationArgv = bootstrapInvocation.argv;
1038
1211
  const invocationProcessArgv = [process.argv[0], process.argv[1], ...invocationArgv];
1212
+ const isBareInvocation = invocationArgv.length === 0;
1039
1213
  try {
1040
1214
  applyBootstrapPagerPolicy(invocationArgv);
1215
+ const registrationSelection = resolveCoreCommandRegistrationSelection(invocationArgv);
1216
+ await registerCoreCommandFamilies(program, registrationSelection);
1217
+ if (shouldAttachRichHelpTextForInvocation(invocationArgv)) {
1218
+ attachRichHelpText(program, invocationArgv);
1219
+ }
1041
1220
  const registerDynamicCommands = shouldRegisterDynamicExtensionPaths(program, invocationArgv);
1042
1221
  if (registerDynamicCommands) {
1043
1222
  await registerDynamicExtensionCommandPaths(program, invocationArgv);
@@ -1054,6 +1233,10 @@ async function main() {
1054
1233
  if (renderedBootstrapJsonHelp) {
1055
1234
  return;
1056
1235
  }
1236
+ if (isBareInvocation) {
1237
+ program.outputHelp();
1238
+ return;
1239
+ }
1057
1240
  await program.parseAsync(invocationProcessArgv);
1058
1241
  }
1059
1242
  catch (error) {
@@ -1345,4 +1528,5 @@ async function main() {
1345
1528
  }
1346
1529
  }
1347
1530
  void main();
1348
- //# sourceMappingURL=main.js.map
1531
+ //# sourceMappingURL=main.js.map
1532
+ //# debugId=bb46ecaf-3f2f-526b-b6fa-4d87511ede62