@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
@@ -9,7 +9,7 @@ Use this page to get from a clean repository to a tracked, verified item.
9
9
  - Claim before implementation.
10
10
  - Link changed files, docs, and tests to the item.
11
11
  - Close only after evidence is recorded.
12
- - Use `pm guide quickstart` or `pm guide workflows` when you need local docs routing.
12
+ - Use `pm install guide-shell --project` before `pm guide quickstart` or `pm guide workflows` when you need local docs routing.
13
13
 
14
14
  Tracked documentation work: [pm-1sb2](../.agents/pm/tasks/pm-1sb2.toon).
15
15
 
@@ -34,9 +34,10 @@ For one-off use:
34
34
  npx @unbrained/pm-cli --help
35
35
  ```
36
36
 
37
- Optional first-party packages are installable on demand:
37
+ Optional first-party packages are installable during init or on demand:
38
38
 
39
39
  ```bash
40
+ pm init --defaults --with-packages
40
41
  pm package catalog --project
41
42
  pm install '*' --project
42
43
  pm install all --project
@@ -48,9 +49,14 @@ pm package doctor --project --detail summary
48
49
  ```bash
49
50
  pm init
50
51
  pm health --check-only
52
+ pm init --agent-guidance status
53
+ pm init --agent-guidance add
51
54
  ```
52
55
 
53
56
  `pm init` creates `.agents/pm/` with settings, item folders, history, locks, search cache directories, and project extension storage.
57
+ When AGENTS/CLAUDE guidance is missing, default `pm init` uses `--agent-guidance ask`: it prompts only in TTY, never blocks non-interactive runs, and records declined prompts.
58
+ Use `pm init --agent-guidance add` to write the compact workflow block later, or `pm init --agent-guidance status` to inspect guidance state without changing files.
59
+ Use `pm init --defaults --with-packages` when agents should get bundled commands such as calendar, templates, advanced search, and governance helpers in one non-interactive setup step.
54
60
 
55
61
  ## Create Your First Item
56
62
 
@@ -94,9 +100,9 @@ Do not create a duplicate item until `context`, `search`, and list commands show
94
100
  ## Link Work Artifacts
95
101
 
96
102
  ```bash
97
- pm files <item-id> --add path=src/core/lock/lock.ts,scope=project,note="implementation"
98
- pm docs <item-id> --add path=docs/ARCHITECTURE.md,scope=project,note="design context"
99
- pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/lock.spec.ts",scope=project,timeout_seconds=240
103
+ pm files <item-id> --add path=src/core/lock/lock.ts,note="implementation"
104
+ pm docs <item-id> --add path=docs/ARCHITECTURE.md,note="design context"
105
+ pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/lock.spec.ts",timeout_seconds=240
100
106
  ```
101
107
 
102
108
  Use `node scripts/run-tests.mjs ...` for linked tests so tracker data is sandboxed.
package/docs/README.md CHANGED
@@ -2,11 +2,12 @@
2
2
 
3
3
  This directory is the public documentation home for `pm-cli`. It is organized for progressive disclosure: read the smallest page that answers the current question, then follow links only when more detail is needed.
4
4
 
5
- ## CLI Guide Router
5
+ ## Optional CLI Guide Router
6
6
 
7
- `pm guide` exposes the same documentation routes from inside the CLI:
7
+ `pm guide` is provided by the optional `guide-shell` package. Install it when local in-CLI documentation routing is useful:
8
8
 
9
9
  ```bash
10
+ pm install guide-shell --project
10
11
  pm guide
11
12
  pm guide quickstart
12
13
  pm guide commands --depth standard
@@ -23,7 +24,7 @@ pm guide release --json
23
24
  | Maintainer | [Contributing](../CONTRIBUTING.md) | [Testing](TESTING.md), [Releasing](RELEASING.md), [Architecture](ARCHITECTURE.md) |
24
25
  | Package author | [Packages and Extensions](EXTENSIONS.md) | [SDK](SDK.md), [starter extension](examples/starter-extension/README.md) |
25
26
  | Codex user | [Codex Plugin](CODEX_PLUGIN.md) | [Agent Guide](AGENT_GUIDE.md), then [Command Reference](COMMANDS.md) |
26
- | Machine client | `pm guide commands` | [Command Reference](COMMANDS.md#machine-contracts), then `pm contracts --json` |
27
+ | Machine client | `pm contracts --json` | [Command Reference](COMMANDS.md#machine-contracts), optionally `pm install guide-shell --project && pm guide commands` |
27
28
 
28
29
  ## Documentation Map
29
30
 
@@ -41,8 +42,8 @@ pm guide release --json
41
42
 
42
43
  ## Guide Topic Map
43
44
 
44
- | `pm guide` topic | Primary docs |
45
- |------------------|--------------|
45
+ | Optional `pm guide` topic | Primary docs |
46
+ |-----------------------------|--------------|
46
47
  | `quickstart` | [Quickstart](QUICKSTART.md), [Command Reference](COMMANDS.md) |
47
48
  | `commands` | [Command Reference](COMMANDS.md), [Configuration](CONFIGURATION.md) |
48
49
  | `workflows` | [Agent Guide](AGENT_GUIDE.md), [Testing](TESTING.md) |
@@ -79,7 +80,7 @@ This documentation structure is tracked through:
79
80
  When changing docs, link files back to the active item:
80
81
 
81
82
  ```bash
82
- pm docs <item-id> --add path=docs/README.md,scope=project,note="documentation index"
83
+ pm docs <item-id> --add path=docs/README.md,note="documentation index"
83
84
  pm comments <item-id> "Docs updated; links and build verified."
84
85
  ```
85
86
 
package/docs/RELEASING.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Releasing `@unbrained/pm-cli`
2
2
 
3
3
  This page is for maintainers cutting npm and GitHub releases. It assumes release work is tracked with `pm`.
4
- For local progressive-disclosure routing, use `pm guide release`.
4
+ For local progressive-disclosure routing, install `guide-shell` with `pm install guide-shell --project`, then use `pm guide release`.
5
5
 
6
6
  ## Agent Quick Context
7
7
 
@@ -10,7 +10,7 @@ For local progressive-disclosure routing, use `pm guide release`.
10
10
  - Publishing is owned by the tag-driven GitHub Actions release workflow.
11
11
  - Do not run manual `npm publish`.
12
12
  - Run local parity gates before pushing release tags.
13
- - Use `pm guide release --json` for machine-readable release docs routing.
13
+ - Use `pm guide release --json` for machine-readable release docs routing after `guide-shell` is installed.
14
14
 
15
15
  Tracked documentation work: [pm-1sb2](../.agents/pm/tasks/pm-1sb2.toon).
16
16
 
@@ -35,12 +35,12 @@ pnpm version:check
35
35
 
36
36
  ## One-Time Setup
37
37
 
38
- - Prefer npm Trusted Publishing for `.github/workflows/release.yml` so GitHub-hosted release jobs can publish with short-lived OIDC credentials. Keep `id-token: write`, `npm publish --access public --provenance`, and the package repository URL aligned with npm's Trusted Publisher configuration. If Trusted Publishing is not configured yet, add `NPM_TOKEN` as a GitHub Environment or repository secret as the fallback publisher credential.
38
+ - Use npm provenance publishing for `.github/workflows/release.yml` so GitHub-hosted release jobs publish signed packages. Keep `id-token: write`, Node 24 or newer, npm 11.5.1 or newer, `NODE_AUTH_TOKEN` from the `release` environment `NPM_TOKEN` secret, and `npm publish --access public --provenance`. The token must authenticate as a maintainer with read-write access to `@unbrained/pm-cli`.
39
39
  - Add `SENTRY_AUTH_TOKEN` as an optional GitHub Environment or repository secret when Sentry release creation and sourcemap upload should run. Add `SENTRY_PERSONAL_ADMIN_TOKEN` only when the GitHub-hosted Sentry issue-threshold gate should read unresolved issues; CI-scoped release tokens may not have issue-read scope. The release workflow skips Sentry upload cleanly when `SENTRY_AUTH_TOKEN` is absent and skips the GitHub-hosted issue-threshold gate when `SENTRY_PERSONAL_ADMIN_TOKEN` is absent; local maintainers should still run the token-backed Sentry gate before release.
40
40
  - Keep any `release` environment compatible with free GitHub features. This repository is public, so environment secrets and tag/branch deployment rules are compatible with the free GitHub path; do not add paid-only release gates.
41
41
  - Ensure `GITHUB_TOKEN` has `contents: write` for GitHub Release creation.
42
42
  - Keep `package.json` repository, homepage, and bugs URLs aligned with `https://github.com/unbraind/pm-cli`.
43
- - Keep npm automation token settings compatible with provenance publishing. The release workflow must keep `id-token: write`, a GitHub-hosted runner, and `npm publish --access public --provenance`. npm Trusted Publishing is preferred because it uses OIDC short-lived credentials; if the npm package is configured for Trusted Publishing, restrict traditional token publishing after verifying the workflow.
43
+ - Keep npm publishing compatible with provenance. The release workflow must keep `id-token: write`, a GitHub-hosted runner, Node 24 or newer, npm 11.5.1 or newer, a valid `NPM_TOKEN`, and `npm publish --access public --provenance`.
44
44
 
45
45
  ## Automated Daily Driver
46
46
 
@@ -53,7 +53,8 @@ Policy:
53
53
  - release at most once per UTC day by default
54
54
  - same-day follow-up release (`YYYY.M.D-N`) is manual-only via `allow_same_day_release=true`
55
55
  - release preparation must pass all quality and compatibility gates before commit+tag push
56
- - external Sentry checks run when a Sentry token is configured; local maintainers can make Sentry and private telemetry mandatory with `--telemetry-mode required`
56
+ - `CHANGELOG.pm.md` is generated by the latest npm `pm-changelog` package (`pm install npm:pm-changelog --project`, then `pm changelog generate`) from closed tracker items and checked in CI; do not edit it by hand
57
+ - external Sentry checks run when a Sentry token is configured; local maintainers should run private reliability checks separately and keep raw operational details in ignored local notes
57
58
  - after creating and pushing a new tag, auto-release dispatches `.github/workflows/release.yml` with that tag and waits for the publish workflow to finish, because GitHub does not start normal push/tag workflows from `GITHUB_TOKEN` pushes
58
59
 
59
60
  Pipeline entrypoint:
@@ -66,9 +67,12 @@ The pipeline performs:
66
67
 
67
68
  1. change detection + one-release-per-day guard
68
69
  2. version bump + changelog promotion from `[Unreleased]`
69
- 3. strict gates (build, typecheck, docs/skills freshness, coverage, static quality, compatibility, security, smoke checks, reliability gate)
70
- 4. release note generation from changelog + pm evidence
71
- 5. commit and tag creation (plus optional push)
70
+ 3. latest `pm-changelog` install and tracker changelog refresh through `pm changelog generate`
71
+ 4. strict gates (build, typecheck, docs/skills freshness, coverage, static quality, compatibility, security, smoke checks, reliability gate)
72
+ 5. release note generation from changelog + pm evidence
73
+ 6. commit and tag creation (plus optional push)
74
+
75
+ If commits since the last tag touch source, package, script, or workflow files, an empty `[Unreleased]` section is a release blocker. The pipeline exits nonzero and reports `changelog_required_files` plus `release_changelog_required:source_or_package_changes_without_unreleased_entry` so the missing release note is visible in automation instead of becoming a green no-op.
72
76
 
73
77
  ## Local Release Parity Checklist
74
78
 
@@ -104,7 +108,7 @@ If private reliability checks identify repeated user friction, either confirm th
104
108
  pnpm release:pipeline:dry-run
105
109
 
106
110
  # Full local preparation (version/changelog mutation + local commit/tag)
107
- pnpm release:pipeline -- --telemetry-mode required
111
+ pnpm release:pipeline
108
112
  ```
109
113
 
110
114
  5. Push branch and tag after local green.
package/docs/SDK.md CHANGED
@@ -110,7 +110,16 @@ pm contracts --action calendar --runtime-only --schema-only --json
110
110
  pm contracts --command templates --runtime-only --flags-only --json
111
111
  ```
112
112
 
113
- Use static SDK contracts for baseline validation, then use `pm contracts --runtime-only` in the target project before invoking package-provided commands or actions.
113
+ Use static SDK contracts for baseline validation, then use runtime contracts in the target project before invoking package-provided commands or actions. Embedded SDK consumers can avoid subprocesses:
114
+
115
+ ```ts
116
+ import { getContracts } from "@unbrained/pm-cli/sdk";
117
+
118
+ const contracts = await getContracts("/path/to/project/.agents/pm", {
119
+ runtimeOnly: true,
120
+ flagsOnly: true,
121
+ });
122
+ ```
114
123
 
115
124
  When a package-owned command is missing at runtime, CLI usage guidance now includes a deterministic install hint (for example `pm install calendar` or `pm install search-advanced`) so agents can recover in one retry.
116
125
 
@@ -223,7 +232,7 @@ Manifest capability: `search`.
223
232
  ## Robust Automation Pattern
224
233
 
225
234
  1. Read `PM_TOOL_ACTIONS` or `PM_TOOL_PARAMETERS_SCHEMA` for baseline static validation.
226
- 2. Run `pm contracts --runtime-only --json` inside the target project.
235
+ 2. Load runtime contracts with `getContracts(pmRoot, { runtimeOnly: true })` or run `pm contracts --runtime-only --json` inside the target project.
227
236
  3. Verify the action appears in `actions` and has `action_availability[].invocable: true`.
228
237
  4. Validate required fields with `PM_TOOL_ACTION_PARAMETER_CONTRACTS` for static actions or the runtime schema for package actions.
229
238
  5. Execute only after preflight passes.
package/docs/TESTING.md CHANGED
@@ -36,7 +36,7 @@ Use focused runs while iterating, then run coverage before closure when risk or
36
36
  Add tests to the item that owns the work:
37
37
 
38
38
  ```bash
39
- pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/output.spec.ts",scope=project,timeout_seconds=240
39
+ pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/output.spec.ts",timeout_seconds=240
40
40
  pm test <item-id> --run --progress
41
41
  ```
42
42
 
@@ -76,7 +76,7 @@ Linked tests can include assertion metadata:
76
76
 
77
77
  ```bash
78
78
  pm test <item-id> --add \
79
- command="pm list-open --json",scope=project,timeout_seconds=120,assert_json_field_gte=count:0
79
+ command="pm list-open --json",timeout_seconds=120,assert_json_field_gte=count:0
80
80
  ```
81
81
 
82
82
  Common assertion keys include:
package/marketplace.json CHANGED
@@ -7,10 +7,10 @@
7
7
  },
8
8
  "plugins": [
9
9
  {
10
- "name": "pm-cli",
10
+ "name": "pm-claude",
11
11
  "description": "Native pm CLI integration for Claude Code — 18 MCP tools, 5 workflow skills, 14 slash commands, 3 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
12
- "version": "1.3.0",
13
- "source": "./plugins/pm-cli-claude",
12
+ "version": "1.4.0",
13
+ "source": "./plugins/pm-claude",
14
14
  "author": {
15
15
  "name": "unbrained",
16
16
  "url": "https://github.com/unbraind/pm-cli"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.5.14",
3
+ "version": "2026.5.24",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "author": "unbrained",
@@ -49,12 +49,14 @@
49
49
  ".claude-plugin/**",
50
50
  "plugins/**",
51
51
  "packages/pm-*/**",
52
+ "scripts/finalize-build.mjs",
52
53
  "scripts/install.sh",
53
54
  "scripts/install.ps1",
55
+ "scripts/prepare-build-cache.mjs",
54
56
  "marketplace.json"
55
57
  ],
56
58
  "scripts": {
57
- "build": "tsc -p tsconfig.json",
59
+ "build": "node scripts/prepare-build-cache.mjs && tsc -p tsconfig.json && node scripts/finalize-build.mjs",
58
60
  "typecheck": "tsc --noEmit -p tsconfig.json && tsc -p tsconfig.packages.json",
59
61
  "start": "node dist/cli.js",
60
62
  "dev": "tsx src/cli.ts",
@@ -67,6 +69,9 @@
67
69
  "smoke:claude-plugin": "node scripts/smoke-claude-plugin.mjs",
68
70
  "version:check": "node scripts/release-version.mjs check",
69
71
  "version:next": "node scripts/release-version.mjs next",
72
+ "changelog:pm:install": "node dist/cli.js install npm:pm-changelog --project",
73
+ "changelog:pm": "pnpm changelog:pm:install && node dist/cli.js changelog generate --output CHANGELOG.pm.md --title \"pm Tracker Changelog\" --group-by release --status closed",
74
+ "changelog:pm:check": "pnpm changelog:pm:install && node dist/cli.js changelog generate --output CHANGELOG.pm.md --title \"pm Tracker Changelog\" --group-by release --status closed --check",
70
75
  "release:notes": "node scripts/generate-release-notes.mjs",
71
76
  "release:changelog": "node scripts/release/changelog-promote.mjs",
72
77
  "release:gates": "node scripts/release/run-gates.mjs --telemetry-mode best-effort",
@@ -107,21 +112,19 @@
107
112
  },
108
113
  "dependencies": {
109
114
  "@sentry/node": "^10.51.0",
110
- "@toon-format/toon": "^2.1.0",
115
+ "@toon-format/toon": "^2.3.0",
111
116
  "commander": "^14.0.3",
112
117
  "fast-glob": "^3.3.3",
113
- "fast-json-patch": "^3.1.1",
114
- "undici": "^8.1.0",
115
- "zod": "^4.3.6"
118
+ "fast-json-patch": "^3.1.1"
116
119
  },
117
120
  "devDependencies": {
118
- "@sentry/cli": "^3.4.1",
119
- "@types/node": "^25.6.0",
120
- "@vitest/coverage-v8": "^4.1.5",
121
+ "@sentry/cli": "^3.4.3",
122
+ "@types/node": "^25.9.1",
123
+ "@vitest/coverage-v8": "^4.1.7",
121
124
  "c8": "^11.0.0",
122
- "tsx": "^4.21.0",
125
+ "tsx": "^4.22.3",
123
126
  "typescript": "^6.0.3",
124
- "vitest": "^4.1.5"
127
+ "vitest": "^4.1.7"
125
128
  },
126
129
  "pnpm": {
127
130
  "onlyBuiltDependencies": [
@@ -129,7 +132,7 @@
129
132
  ],
130
133
  "overrides": {
131
134
  "rollup": ">=4.59.0",
132
- "brace-expansion": ">=5.0.5",
135
+ "brace-expansion": ">=5.0.6",
133
136
  "vite": "7.3.2"
134
137
  }
135
138
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@unbrained/pm-package-beads",
2
+ "name": "@unbrained/pm-beads",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "type": "module",
@@ -1,9 +1,11 @@
1
1
  # pm Calendar Package
2
2
 
3
- `@unbrained/pm-package-calendar` provides agenda and calendar views as an installable pm package.
3
+ `@unbrained/pm-calendar` provides agenda and calendar views as an installable pm package.
4
4
 
5
5
  ```bash
6
- pm install calendar
6
+ pm install calendar --project
7
+ # Or bootstrap all bundled package commands in a new project:
8
+ pm init --defaults --with-packages
7
9
  pm calendar --view week --full-period
8
10
  pm cal --json --view agenda --include reminders,events
9
11
  ```
@@ -23,7 +23,7 @@ const calendarFlags = [
23
23
  { long: "--assignee-filter", value_name: "value", value_type: "string", description: "Filter assignee presence." },
24
24
  { long: "--sprint", value_name: "value", value_type: "string", description: "Filter by sprint." },
25
25
  { long: "--release", value_name: "value", value_type: "string", description: "Filter by release." },
26
- { long: "--include", value_name: "value", value_type: "string", description: "Include sources: deadlines|reminders|events|all." },
26
+ { long: "--include", value_name: "value", value_type: "string", description: "Include sources: deadlines|reminders|events|scheduled|all." },
27
27
  { long: "--recurrence-lookahead-days", value_name: "n", value_type: "string", description: "Bound open-ended recurrence lookahead days." },
28
28
  { long: "--recurrence-lookback-days", value_name: "n", value_type: "string", description: "Bound open-ended recurrence lookback days." },
29
29
  { long: "--occurrence-limit", value_name: "n", value_type: "string", description: "Cap generated occurrences per recurring event." },
@@ -36,8 +36,27 @@ function calendarCommand(name) {
36
36
  name,
37
37
  action: "calendar",
38
38
  description: "Show deadline, reminder, and scheduled event calendar views.",
39
+ arguments: [{ name: "view", required: false, description: "Calendar view: agenda|day|week|month." }],
39
40
  flags: [...calendarFlags],
40
- run: async (context) => runCalendarPackage(context.options, context.global),
41
+ run: async (context) => {
42
+ // Extension flags are parsed loosely, so context.args still contains flag
43
+ // tokens (e.g. ["day", "--date", "+7d"]). Only the leading non-flag tokens
44
+ // are true positionals, so a positional view combined with --date/--from/etc.
45
+ // must not be mistaken for multiple positional views.
46
+ const firstFlagIndex = context.args.findIndex((arg) => arg.startsWith("-"));
47
+ const positionalArgs = firstFlagIndex === -1 ? context.args : context.args.slice(0, firstFlagIndex);
48
+ const positionalView = positionalArgs[0]?.trim();
49
+ if (positionalArgs.length > 1) {
50
+ throw new Error("Calendar accepts at most one positional view: agenda|day|week|month.");
51
+ }
52
+ return runCalendarPackage(
53
+ {
54
+ ...context.options,
55
+ ...(positionalView && context.options.view === undefined ? { view: positionalView } : {}),
56
+ },
57
+ context.global,
58
+ );
59
+ },
41
60
  };
42
61
  }
43
62
 
@@ -46,7 +65,7 @@ export function activate(api) {
46
65
  api.registerCommand(calendarCommand("cal"));
47
66
  api.registerService("output_format", (context) => {
48
67
  const rendered = renderCalendarPackageOutput(context);
49
- return rendered ?? context.payload;
68
+ return rendered ?? null;
50
69
  });
51
70
  }
52
71
 
@@ -29,7 +29,7 @@ const calendarFlags = [
29
29
  { long: "--assignee-filter", value_name: "value", value_type: "string", description: "Filter assignee presence." },
30
30
  { long: "--sprint", value_name: "value", value_type: "string", description: "Filter by sprint." },
31
31
  { long: "--release", value_name: "value", value_type: "string", description: "Filter by release." },
32
- { long: "--include", value_name: "value", value_type: "string", description: "Include sources: deadlines|reminders|events|all." },
32
+ { long: "--include", value_name: "value", value_type: "string", description: "Include sources: deadlines|reminders|events|scheduled|all." },
33
33
  { long: "--recurrence-lookahead-days", value_name: "n", value_type: "string", description: "Bound open-ended recurrence lookahead days." },
34
34
  { long: "--recurrence-lookback-days", value_name: "n", value_type: "string", description: "Bound open-ended recurrence lookback days." },
35
35
  { long: "--occurrence-limit", value_name: "n", value_type: "string", description: "Cap generated occurrences per recurring event." },
@@ -42,8 +42,27 @@ function calendarCommand(name: "calendar" | "cal"): CommandDefinition {
42
42
  name,
43
43
  action: "calendar",
44
44
  description: "Show deadline, reminder, and scheduled event calendar views.",
45
+ arguments: [{ name: "view", required: false, description: "Calendar view: agenda|day|week|month." }],
45
46
  flags: [...calendarFlags],
46
- run: async (context) => runCalendarPackage(context.options as CalendarOptions, context.global),
47
+ run: async (context) => {
48
+ // Extension flags are parsed loosely, so context.args still contains flag
49
+ // tokens (e.g. ["day", "--date", "+7d"]). Only the leading non-flag tokens
50
+ // are true positionals, so a positional view combined with --date/--from/etc.
51
+ // must not be mistaken for multiple positional views.
52
+ const firstFlagIndex = context.args.findIndex((arg) => arg.startsWith("-"));
53
+ const positionalArgs = firstFlagIndex === -1 ? context.args : context.args.slice(0, firstFlagIndex);
54
+ const positionalView = positionalArgs[0]?.trim();
55
+ if (positionalArgs.length > 1) {
56
+ throw new Error("Calendar accepts at most one positional view: agenda|day|week|month.");
57
+ }
58
+ return runCalendarPackage(
59
+ {
60
+ ...(context.options as CalendarOptions),
61
+ ...(positionalView && (context.options as CalendarOptions).view === undefined ? { view: positionalView } : {}),
62
+ },
63
+ context.global,
64
+ );
65
+ },
47
66
  };
48
67
  }
49
68
 
@@ -52,7 +71,7 @@ export function activate(api: ExtensionApi): void {
52
71
  api.registerCommand(calendarCommand("cal"));
53
72
  api.registerService("output_format", (context) => {
54
73
  const rendered = renderCalendarPackageOutput(context as ServiceOverrideContext);
55
- return rendered ?? context.payload;
74
+ return rendered ?? null;
56
75
  });
57
76
  }
58
77
 
@@ -51,10 +51,6 @@ function isCalendarResult(value) {
51
51
  );
52
52
  }
53
53
 
54
- function isCalendarCommand(command) {
55
- return command === "calendar" || command === "cal";
56
- }
57
-
58
54
  function readPayloadFormat(payload) {
59
55
  if (typeof payload === "object" && payload !== null) {
60
56
  const format = payload.format;
@@ -72,6 +68,26 @@ function readPayloadResult(payload) {
72
68
  return payload;
73
69
  }
74
70
 
71
+ function readPayloadCommandOptions(payload) {
72
+ if (typeof payload === "object" && payload !== null) {
73
+ const commandOptions = payload.command_options;
74
+ if (typeof commandOptions === "object" && commandOptions !== null) {
75
+ return commandOptions;
76
+ }
77
+ }
78
+ return {};
79
+ }
80
+
81
+ function readPayloadGlobalOptions(payload) {
82
+ if (typeof payload === "object" && payload !== null) {
83
+ const global = payload.global;
84
+ if (typeof global === "object" && global !== null) {
85
+ return global;
86
+ }
87
+ }
88
+ return {};
89
+ }
90
+
75
91
  export async function runCalendarPackage(options, global) {
76
92
  const loaded = await ensureCalendarCoreModule();
77
93
  return loaded.runCalendar(options, global);
@@ -79,11 +95,14 @@ export async function runCalendarPackage(options, global) {
79
95
 
80
96
  export function renderCalendarPackageOutput(context) {
81
97
  const result = readPayloadResult(context.payload);
82
- if (!calendarCore || !isCalendarCommand(context.command) || !isCalendarResult(result)) {
98
+ if (!calendarCore || !isCalendarResult(result)) {
83
99
  return null;
84
100
  }
85
- const options = context.options ?? {};
86
- const global = context.global ?? {};
101
+ const options =
102
+ context.options && Object.keys(context.options).length > 0
103
+ ? context.options
104
+ : readPayloadCommandOptions(context.payload);
105
+ const global = context.global ?? readPayloadGlobalOptions(context.payload);
87
106
  const outputFormat = calendarCore.resolveCalendarOutputFormat(options, global);
88
107
  if (outputFormat === "markdown") {
89
108
  return `${calendarCore.renderCalendarMarkdown(result)}\n`;
@@ -60,10 +60,6 @@ function isCalendarResult(value: unknown): value is CalendarResult {
60
60
  );
61
61
  }
62
62
 
63
- function isCalendarCommand(command: unknown): boolean {
64
- return command === "calendar" || command === "cal";
65
- }
66
-
67
63
  function readPayloadFormat(payload: unknown): "toon" | "json" {
68
64
  if (typeof payload === "object" && payload !== null) {
69
65
  const format = (payload as { format?: unknown }).format;
@@ -81,6 +77,26 @@ function readPayloadResult(payload: unknown): unknown {
81
77
  return payload;
82
78
  }
83
79
 
80
+ function readPayloadCommandOptions(payload: unknown): CalendarOptions {
81
+ if (typeof payload === "object" && payload !== null) {
82
+ const commandOptions = (payload as { command_options?: unknown }).command_options;
83
+ if (typeof commandOptions === "object" && commandOptions !== null) {
84
+ return commandOptions as CalendarOptions;
85
+ }
86
+ }
87
+ return {};
88
+ }
89
+
90
+ function readPayloadGlobalOptions(payload: unknown): GlobalOptions {
91
+ if (typeof payload === "object" && payload !== null) {
92
+ const global = (payload as { global?: unknown }).global;
93
+ if (typeof global === "object" && global !== null) {
94
+ return global as GlobalOptions;
95
+ }
96
+ }
97
+ return {};
98
+ }
99
+
84
100
  export async function runCalendarPackage(options: CalendarOptions, global: GlobalOptions): Promise<CalendarResult> {
85
101
  const loaded = await ensureCalendarCoreModule();
86
102
  return loaded.runCalendar(options, global);
@@ -88,11 +104,14 @@ export async function runCalendarPackage(options: CalendarOptions, global: Globa
88
104
 
89
105
  export function renderCalendarPackageOutput(context: ServiceOverrideContext): string | null {
90
106
  const result = readPayloadResult(context.payload);
91
- if (!calendarCore || !isCalendarCommand(context.command) || !isCalendarResult(result)) {
107
+ if (!calendarCore || !isCalendarResult(result)) {
92
108
  return null;
93
109
  }
94
- const options = (context.options ?? {}) as CalendarOptions;
95
- const global = (context.global ?? {}) as GlobalOptions;
110
+ const options =
111
+ context.options && Object.keys(context.options).length > 0
112
+ ? (context.options as CalendarOptions)
113
+ : readPayloadCommandOptions(context.payload);
114
+ const global = context.global ?? readPayloadGlobalOptions(context.payload);
96
115
  const outputFormat = calendarCore.resolveCalendarOutputFormat(options, global);
97
116
  if (outputFormat === "markdown") {
98
117
  return `${calendarCore.renderCalendarMarkdown(result)}\n`;
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@unbrained/pm-package-calendar",
2
+ "name": "@unbrained/pm-calendar",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "type": "module",
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@unbrained/pm-package-governance-audit",
2
+ "name": "@unbrained/pm-governance-audit",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "type": "module",
@@ -66,7 +66,7 @@ export function activate(api) {
66
66
  api.registerCommand(completionTagsCommand());
67
67
  api.registerService("output_format", (context) => {
68
68
  const rendered = renderGuideShellPackageOutput(context);
69
- return rendered ?? context.payload;
69
+ return rendered ?? null;
70
70
  });
71
71
  }
72
72
 
@@ -71,7 +71,7 @@ export function activate(api: ExtensionApi): void {
71
71
  api.registerCommand(completionTagsCommand());
72
72
  api.registerService("output_format", (context) => {
73
73
  const rendered = renderGuideShellPackageOutput(context as ServiceOverrideContext);
74
- return rendered ?? context.payload;
74
+ return rendered ?? null;
75
75
  });
76
76
  }
77
77
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@unbrained/pm-package-guide-shell",
2
+ "name": "@unbrained/pm-guide-shell",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "type": "module",
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "@unbrained/pm-package-linked-test-adapters",
2
+ "name": "@unbrained/pm-linked-test-adapters",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
5
  "type": "module",
@@ -6,9 +6,13 @@ First-party package that restores optional advanced search surfaces in bare-core
6
6
 
7
7
  - Adds `pm search-advanced` with:
8
8
  - `--mode keyword|semantic|hybrid`
9
+ - `--semantic`, `--hybrid`
9
10
  - `--include-linked`
10
11
  - `--title-exact`
11
12
  - `--phrase-exact`
13
+ - `--type`, `--tag`, `--priority`
14
+ - `--deadline-before`, `--deadline-after`
15
+ - `--limit`, `--fields`, `--compact`, `--full`
12
16
  - Adds `pm reindex` with:
13
17
  - `--mode keyword|semantic|hybrid`
14
18
  - `--progress`
@@ -23,5 +27,9 @@ pm install search-advanced --project
23
27
 
24
28
  ```bash
25
29
  pm search-advanced "vector cache" --mode hybrid --limit 5 --json
30
+ pm search-advanced --hybrid "vector cache" --limit 5 --json
31
+ pm search-advanced "calendar package" --mode keyword --fields id,title,score --compact --json
26
32
  pm reindex --mode hybrid --progress --json
27
33
  ```
34
+
35
+ Without `--mode`, `--semantic`, or `--hybrid`, `search-advanced` stays keyword-first for fast agent reads.