@unbrained/pm-cli 2026.5.12 → 2026.5.18

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 (407) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/AGENTS.md +78 -457
  3. package/CHANGELOG.md +22 -0
  4. package/CONTRIBUTING.md +1 -0
  5. package/PRD.md +7 -28
  6. package/README.md +8 -14
  7. package/dist/cli/argv-utils.js +4 -1
  8. package/dist/cli/argv-utils.js.map +1 -1
  9. package/dist/cli/bootstrap-args.js +4 -1
  10. package/dist/cli/bootstrap-args.js.map +1 -1
  11. package/dist/cli/commander-usage.js +32 -1
  12. package/dist/cli/commander-usage.js.map +1 -1
  13. package/dist/cli/commands/activity.js +23 -5
  14. package/dist/cli/commands/activity.js.map +1 -1
  15. package/dist/cli/commands/aggregate.js +5 -2
  16. package/dist/cli/commands/aggregate.js.map +1 -1
  17. package/dist/cli/commands/append.js +4 -1
  18. package/dist/cli/commands/append.js.map +1 -1
  19. package/dist/cli/commands/calendar.js +9 -3
  20. package/dist/cli/commands/calendar.js.map +1 -1
  21. package/dist/cli/commands/claim.d.ts +3 -0
  22. package/dist/cli/commands/claim.js +19 -3
  23. package/dist/cli/commands/claim.js.map +1 -1
  24. package/dist/cli/commands/close.js +4 -1
  25. package/dist/cli/commands/close.js.map +1 -1
  26. package/dist/cli/commands/comments-audit.js +4 -1
  27. package/dist/cli/commands/comments-audit.js.map +1 -1
  28. package/dist/cli/commands/comments.js +4 -1
  29. package/dist/cli/commands/comments.js.map +1 -1
  30. package/dist/cli/commands/completion.js +98 -2
  31. package/dist/cli/commands/completion.js.map +1 -1
  32. package/dist/cli/commands/config.js +4 -1
  33. package/dist/cli/commands/config.js.map +1 -1
  34. package/dist/cli/commands/context.js +19 -5
  35. package/dist/cli/commands/context.js.map +1 -1
  36. package/dist/cli/commands/contracts.d.ts +9 -0
  37. package/dist/cli/commands/contracts.js +205 -49
  38. package/dist/cli/commands/contracts.js.map +1 -1
  39. package/dist/cli/commands/create.js +88 -9
  40. package/dist/cli/commands/create.js.map +1 -1
  41. package/dist/cli/commands/dedupe-audit.js +4 -1
  42. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  43. package/dist/cli/commands/delete.js +4 -1
  44. package/dist/cli/commands/delete.js.map +1 -1
  45. package/dist/cli/commands/deps.js +4 -1
  46. package/dist/cli/commands/deps.js.map +1 -1
  47. package/dist/cli/commands/docs.js +4 -1
  48. package/dist/cli/commands/docs.js.map +1 -1
  49. package/dist/cli/commands/extension.d.ts +7 -2
  50. package/dist/cli/commands/extension.js +360 -64
  51. package/dist/cli/commands/extension.js.map +1 -1
  52. package/dist/cli/commands/files.js +4 -1
  53. package/dist/cli/commands/files.js.map +1 -1
  54. package/dist/cli/commands/gc.js +4 -1
  55. package/dist/cli/commands/gc.js.map +1 -1
  56. package/dist/cli/commands/get.d.ts +7 -3
  57. package/dist/cli/commands/get.js +91 -18
  58. package/dist/cli/commands/get.js.map +1 -1
  59. package/dist/cli/commands/guide.js +6 -8
  60. package/dist/cli/commands/guide.js.map +1 -1
  61. package/dist/cli/commands/health.d.ts +4 -0
  62. package/dist/cli/commands/health.js +31 -8
  63. package/dist/cli/commands/health.js.map +1 -1
  64. package/dist/cli/commands/history-redact.d.ts +42 -0
  65. package/dist/cli/commands/history-redact.js +559 -0
  66. package/dist/cli/commands/history-redact.js.map +1 -0
  67. package/dist/cli/commands/history.d.ts +4 -0
  68. package/dist/cli/commands/history.js +14 -3
  69. package/dist/cli/commands/history.js.map +1 -1
  70. package/dist/cli/commands/index.d.ts +2 -8
  71. package/dist/cli/commands/index.js +6 -9
  72. package/dist/cli/commands/index.js.map +1 -1
  73. package/dist/cli/commands/init-agent-guidance.d.ts +31 -0
  74. package/dist/cli/commands/init-agent-guidance.js +336 -0
  75. package/dist/cli/commands/init-agent-guidance.js.map +1 -0
  76. package/dist/cli/commands/init.d.ts +14 -0
  77. package/dist/cli/commands/init.js +75 -1
  78. package/dist/cli/commands/init.js.map +1 -1
  79. package/dist/cli/commands/learnings.js +4 -1
  80. package/dist/cli/commands/learnings.js.map +1 -1
  81. package/dist/cli/commands/list.d.ts +1 -0
  82. package/dist/cli/commands/list.js +42 -18
  83. package/dist/cli/commands/list.js.map +1 -1
  84. package/dist/cli/commands/metadata-normalizers.js +4 -1
  85. package/dist/cli/commands/metadata-normalizers.js.map +1 -1
  86. package/dist/cli/commands/normalize.js +4 -1
  87. package/dist/cli/commands/normalize.js.map +1 -1
  88. package/dist/cli/commands/notes.js +4 -1
  89. package/dist/cli/commands/notes.js.map +1 -1
  90. package/dist/cli/commands/plan.d.ts +118 -0
  91. package/dist/cli/commands/plan.js +975 -0
  92. package/dist/cli/commands/plan.js.map +1 -0
  93. package/dist/cli/commands/reindex.d.ts +8 -0
  94. package/dist/cli/commands/reindex.js +100 -24
  95. package/dist/cli/commands/reindex.js.map +1 -1
  96. package/dist/cli/commands/restore.js +4 -1
  97. package/dist/cli/commands/restore.js.map +1 -1
  98. package/dist/cli/commands/search.js +58 -27
  99. package/dist/cli/commands/search.js.map +1 -1
  100. package/dist/cli/commands/stats.js +4 -1
  101. package/dist/cli/commands/stats.js.map +1 -1
  102. package/dist/cli/commands/templates.js +4 -1
  103. package/dist/cli/commands/templates.js.map +1 -1
  104. package/dist/cli/commands/test-all.js +4 -1
  105. package/dist/cli/commands/test-all.js.map +1 -1
  106. package/dist/cli/commands/test-runs.js +4 -1
  107. package/dist/cli/commands/test-runs.js.map +1 -1
  108. package/dist/cli/commands/test.js +4 -1
  109. package/dist/cli/commands/test.js.map +1 -1
  110. package/dist/cli/commands/update-many.js +4 -1
  111. package/dist/cli/commands/update-many.js.map +1 -1
  112. package/dist/cli/commands/update.js +114 -71
  113. package/dist/cli/commands/update.js.map +1 -1
  114. package/dist/cli/commands/upgrade.js +6 -3
  115. package/dist/cli/commands/upgrade.js.map +1 -1
  116. package/dist/cli/commands/validate.js +32 -4
  117. package/dist/cli/commands/validate.js.map +1 -1
  118. package/dist/cli/error-guidance.js +5 -2
  119. package/dist/cli/error-guidance.js.map +1 -1
  120. package/dist/cli/extension-command-help.js +4 -1
  121. package/dist/cli/extension-command-help.js.map +1 -1
  122. package/dist/cli/extension-command-options.js +4 -1
  123. package/dist/cli/extension-command-options.js.map +1 -1
  124. package/dist/cli/guide-topics.js +4 -1
  125. package/dist/cli/guide-topics.js.map +1 -1
  126. package/dist/cli/help-content.js +52 -33
  127. package/dist/cli/help-content.js.map +1 -1
  128. package/dist/cli/help-json-payload.js +4 -1
  129. package/dist/cli/help-json-payload.js.map +1 -1
  130. package/dist/cli/main.js +276 -32
  131. package/dist/cli/main.js.map +1 -1
  132. package/dist/cli/migration-gates.js +4 -1
  133. package/dist/cli/migration-gates.js.map +1 -1
  134. package/dist/cli/register-list-query.js +55 -150
  135. package/dist/cli/register-list-query.js.map +1 -1
  136. package/dist/cli/register-mutation.js +277 -261
  137. package/dist/cli/register-mutation.js.map +1 -1
  138. package/dist/cli/register-operations.js +62 -199
  139. package/dist/cli/register-operations.js.map +1 -1
  140. package/dist/cli/register-setup.js +55 -146
  141. package/dist/cli/register-setup.js.map +1 -1
  142. package/dist/cli/registration-helpers.d.ts +2 -2
  143. package/dist/cli/registration-helpers.js +11 -21
  144. package/dist/cli/registration-helpers.js.map +1 -1
  145. package/dist/cli/shared-parsers.js +4 -1
  146. package/dist/cli/shared-parsers.js.map +1 -1
  147. package/dist/cli/telemetry-flush.js +4 -1
  148. package/dist/cli/telemetry-flush.js.map +1 -1
  149. package/dist/cli.js +45 -3
  150. package/dist/cli.js.map +1 -1
  151. package/dist/core/extensions/extension-types.js +4 -1
  152. package/dist/core/extensions/extension-types.js.map +1 -1
  153. package/dist/core/extensions/index.js +4 -1
  154. package/dist/core/extensions/index.js.map +1 -1
  155. package/dist/core/extensions/item-fields.js +4 -1
  156. package/dist/core/extensions/item-fields.js.map +1 -1
  157. package/dist/core/extensions/loader.js +84 -54
  158. package/dist/core/extensions/loader.js.map +1 -1
  159. package/dist/core/extensions/runtime-registrations.js +4 -1
  160. package/dist/core/extensions/runtime-registrations.js.map +1 -1
  161. package/dist/core/fs/fs-utils.js +4 -1
  162. package/dist/core/fs/fs-utils.js.map +1 -1
  163. package/dist/core/fs/index.js +4 -1
  164. package/dist/core/fs/index.js.map +1 -1
  165. package/dist/core/history/history-stream-policy.js +4 -1
  166. package/dist/core/history/history-stream-policy.js.map +1 -1
  167. package/dist/core/history/history.js +4 -1
  168. package/dist/core/history/history.js.map +1 -1
  169. package/dist/core/history/index.js +4 -1
  170. package/dist/core/history/index.js.map +1 -1
  171. package/dist/core/item/id.js +4 -1
  172. package/dist/core/item/id.js.map +1 -1
  173. package/dist/core/item/index.js +4 -1
  174. package/dist/core/item/index.js.map +1 -1
  175. package/dist/core/item/item-format.js +241 -2
  176. package/dist/core/item/item-format.js.map +1 -1
  177. package/dist/core/item/parent-reference-policy.js +4 -1
  178. package/dist/core/item/parent-reference-policy.js.map +1 -1
  179. package/dist/core/item/parse.js +33 -3
  180. package/dist/core/item/parse.js.map +1 -1
  181. package/dist/core/item/sprint-release-format.js +4 -1
  182. package/dist/core/item/sprint-release-format.js.map +1 -1
  183. package/dist/core/item/status.js +4 -1
  184. package/dist/core/item/status.js.map +1 -1
  185. package/dist/core/item/type-registry.js +4 -1
  186. package/dist/core/item/type-registry.js.map +1 -1
  187. package/dist/core/lock/index.js +4 -1
  188. package/dist/core/lock/index.js.map +1 -1
  189. package/dist/core/lock/lock.js +4 -1
  190. package/dist/core/lock/lock.js.map +1 -1
  191. package/dist/core/output/command-aware.js +4 -1
  192. package/dist/core/output/command-aware.js.map +1 -1
  193. package/dist/core/output/output.d.ts +4 -0
  194. package/dist/core/output/output.js +47 -6
  195. package/dist/core/output/output.js.map +1 -1
  196. package/dist/core/packages/manifest.d.ts +27 -1
  197. package/dist/core/packages/manifest.js +87 -1
  198. package/dist/core/packages/manifest.js.map +1 -1
  199. package/dist/core/packages/root.d.ts +3 -0
  200. package/dist/core/packages/root.js +51 -0
  201. package/dist/core/packages/root.js.map +1 -0
  202. package/dist/core/schema/runtime-field-filters.js +4 -1
  203. package/dist/core/schema/runtime-field-filters.js.map +1 -1
  204. package/dist/core/schema/runtime-field-values.js +4 -1
  205. package/dist/core/schema/runtime-field-values.js.map +1 -1
  206. package/dist/core/schema/runtime-schema.js +4 -1
  207. package/dist/core/schema/runtime-schema.js.map +1 -1
  208. package/dist/core/search/cache.js +7 -2
  209. package/dist/core/search/cache.js.map +1 -1
  210. package/dist/core/search/corpus.d.ts +2 -0
  211. package/dist/core/search/corpus.js +77 -2
  212. package/dist/core/search/corpus.js.map +1 -1
  213. package/dist/core/search/embedding-batches.d.ts +13 -1
  214. package/dist/core/search/embedding-batches.js +40 -8
  215. package/dist/core/search/embedding-batches.js.map +1 -1
  216. package/dist/core/search/http-client.js +4 -1
  217. package/dist/core/search/http-client.js.map +1 -1
  218. package/dist/core/search/providers.js +4 -1
  219. package/dist/core/search/providers.js.map +1 -1
  220. package/dist/core/search/semantic-defaults.js +11 -2
  221. package/dist/core/search/semantic-defaults.js.map +1 -1
  222. package/dist/core/search/vector-stores.js +4 -1
  223. package/dist/core/search/vector-stores.js.map +1 -1
  224. package/dist/core/sentry/helpers.js +4 -1
  225. package/dist/core/sentry/helpers.js.map +1 -1
  226. package/dist/core/sentry/instrument.js +10 -13
  227. package/dist/core/sentry/instrument.js.map +1 -1
  228. package/dist/core/shared/command-types.js +4 -1
  229. package/dist/core/shared/command-types.js.map +1 -1
  230. package/dist/core/shared/conflict-markers.js +4 -1
  231. package/dist/core/shared/conflict-markers.js.map +1 -1
  232. package/dist/core/shared/constants.d.ts +2 -2
  233. package/dist/core/shared/constants.js +24 -1
  234. package/dist/core/shared/constants.js.map +1 -1
  235. package/dist/core/shared/errors.js +4 -1
  236. package/dist/core/shared/errors.js.map +1 -1
  237. package/dist/core/shared/index.js +4 -1
  238. package/dist/core/shared/index.js.map +1 -1
  239. package/dist/core/shared/levenshtein.js +4 -1
  240. package/dist/core/shared/levenshtein.js.map +1 -1
  241. package/dist/core/shared/primitives.js +4 -1
  242. package/dist/core/shared/primitives.js.map +1 -1
  243. package/dist/core/shared/serialization.js +4 -1
  244. package/dist/core/shared/serialization.js.map +1 -1
  245. package/dist/core/shared/text-normalization.js +4 -1
  246. package/dist/core/shared/text-normalization.js.map +1 -1
  247. package/dist/core/shared/time.js +4 -1
  248. package/dist/core/shared/time.js.map +1 -1
  249. package/dist/core/store/front-matter-cache.d.ts +8 -1
  250. package/dist/core/store/front-matter-cache.js +28 -14
  251. package/dist/core/store/front-matter-cache.js.map +1 -1
  252. package/dist/core/store/index.js +4 -1
  253. package/dist/core/store/index.js.map +1 -1
  254. package/dist/core/store/item-format-migration.js +4 -1
  255. package/dist/core/store/item-format-migration.js.map +1 -1
  256. package/dist/core/store/item-store.d.ts +2 -0
  257. package/dist/core/store/item-store.js +66 -3
  258. package/dist/core/store/item-store.js.map +1 -1
  259. package/dist/core/store/paths.js +4 -1
  260. package/dist/core/store/paths.js.map +1 -1
  261. package/dist/core/store/settings.js +39 -1
  262. package/dist/core/store/settings.js.map +1 -1
  263. package/dist/core/telemetry/consent.js +4 -1
  264. package/dist/core/telemetry/consent.js.map +1 -1
  265. package/dist/core/telemetry/observability.d.ts +1 -1
  266. package/dist/core/telemetry/observability.js +11 -2
  267. package/dist/core/telemetry/observability.js.map +1 -1
  268. package/dist/core/telemetry/runtime.js +31 -5
  269. package/dist/core/telemetry/runtime.js.map +1 -1
  270. package/dist/core/test/background-runs.js +4 -1
  271. package/dist/core/test/background-runs.js.map +1 -1
  272. package/dist/core/test/item-test-run-tracking.js +4 -1
  273. package/dist/core/test/item-test-run-tracking.js.map +1 -1
  274. package/dist/mcp/server.d.ts +8 -0
  275. package/dist/mcp/server.js +212 -53
  276. package/dist/mcp/server.js.map +1 -1
  277. package/dist/sdk/cli-contracts/commander-mutation-options.d.ts +7 -0
  278. package/dist/sdk/cli-contracts/commander-mutation-options.js +484 -0
  279. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -0
  280. package/dist/sdk/cli-contracts/commander-types.d.ts +21 -0
  281. package/dist/sdk/cli-contracts/commander-types.js +95 -0
  282. package/dist/sdk/cli-contracts/commander-types.js.map +1 -0
  283. package/dist/sdk/cli-contracts.d.ts +10 -17
  284. package/dist/sdk/cli-contracts.js +232 -282
  285. package/dist/sdk/cli-contracts.js.map +1 -1
  286. package/dist/sdk/index.d.ts +2 -1
  287. package/dist/sdk/index.js +5 -1
  288. package/dist/sdk/index.js.map +1 -1
  289. package/dist/sdk/runtime.d.ts +29 -0
  290. package/dist/sdk/runtime.js +31 -0
  291. package/dist/sdk/runtime.js.map +1 -0
  292. package/dist/types/index.js +4 -1
  293. package/dist/types/index.js.map +1 -1
  294. package/dist/types.d.ts +86 -2
  295. package/dist/types.js +34 -1
  296. package/dist/types.js.map +1 -1
  297. package/docs/AGENT_GUIDE.md +16 -6
  298. package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
  299. package/docs/CODEX_PLUGIN.md +2 -2
  300. package/docs/COMMANDS.md +83 -8
  301. package/docs/CONFIGURATION.md +4 -1
  302. package/docs/EXTENSIONS.md +176 -807
  303. package/docs/QUICKSTART.md +12 -5
  304. package/docs/README.md +7 -6
  305. package/docs/RELEASING.md +6 -4
  306. package/docs/SDK.md +78 -441
  307. package/docs/TESTING.md +2 -2
  308. package/marketplace.json +3 -3
  309. package/package.json +7 -4
  310. package/packages/pm-beads/extensions/beads/index.js +90 -101
  311. package/packages/pm-beads/extensions/beads/index.ts +2 -2
  312. package/packages/pm-beads/extensions/beads/runtime.js +2 -17
  313. package/packages/pm-beads/extensions/beads/runtime.ts +41 -18
  314. package/packages/pm-beads/package.json +34 -1
  315. package/packages/pm-calendar/README.md +13 -0
  316. package/packages/pm-calendar/extensions/calendar/index.js +56 -0
  317. package/packages/pm-calendar/extensions/calendar/index.ts +62 -0
  318. package/packages/pm-calendar/extensions/calendar/manifest.json +7 -0
  319. package/packages/pm-calendar/extensions/calendar/runtime.js +114 -0
  320. package/packages/pm-calendar/extensions/calendar/runtime.ts +123 -0
  321. package/packages/pm-calendar/package.json +51 -0
  322. package/packages/pm-governance-audit/README.md +23 -0
  323. package/packages/pm-governance-audit/extensions/governance-audit/index.js +117 -0
  324. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +118 -0
  325. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +7 -0
  326. package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +159 -0
  327. package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +176 -0
  328. package/packages/pm-governance-audit/package.json +52 -0
  329. package/packages/pm-guide-shell/README.md +23 -0
  330. package/packages/pm-guide-shell/extensions/guide-shell/index.js +76 -0
  331. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +81 -0
  332. package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +7 -0
  333. package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +263 -0
  334. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +327 -0
  335. package/packages/pm-guide-shell/package.json +52 -0
  336. package/packages/pm-linked-test-adapters/README.md +24 -0
  337. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +101 -0
  338. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +102 -0
  339. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +7 -0
  340. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +142 -0
  341. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +173 -0
  342. package/packages/pm-linked-test-adapters/package.json +53 -0
  343. package/packages/pm-search-advanced/README.md +27 -0
  344. package/packages/pm-search-advanced/extensions/search-advanced/index.js +93 -0
  345. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +94 -0
  346. package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +7 -0
  347. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +120 -0
  348. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +144 -0
  349. package/packages/pm-search-advanced/package.json +54 -0
  350. package/packages/pm-templates/README.md +20 -0
  351. package/packages/pm-templates/extensions/templates/index.js +101 -0
  352. package/packages/pm-templates/extensions/templates/index.ts +109 -0
  353. package/packages/pm-templates/extensions/templates/manifest.json +7 -0
  354. package/packages/pm-templates/extensions/templates/runtime.js +226 -0
  355. package/packages/pm-templates/extensions/templates/runtime.ts +283 -0
  356. package/packages/pm-templates/package.json +50 -0
  357. package/packages/pm-todos/extensions/todos/index.js +105 -116
  358. package/packages/pm-todos/extensions/todos/index.ts +3 -2
  359. package/packages/pm-todos/extensions/todos/runtime.js +2 -17
  360. package/packages/pm-todos/extensions/todos/runtime.ts +40 -18
  361. package/packages/pm-todos/package.json +35 -1
  362. package/plugins/{pm-cli-claude → pm-claude}/.claude-plugin/plugin.json +2 -2
  363. package/plugins/{pm-cli-claude → pm-claude}/.mcp.json +1 -1
  364. package/plugins/{pm-cli-claude → pm-claude}/README.md +4 -4
  365. package/plugins/{pm-cli-claude → pm-claude}/agents/pm-coordinator.md +1 -1
  366. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-init.md +10 -1
  367. package/plugins/{pm-cli-claude → pm-claude}/commands/pm-planner.md +18 -0
  368. package/plugins/{pm-cli-claude → pm-claude}/scripts/pm-mcp-server.mjs +4 -2
  369. package/plugins/{pm-cli-claude → pm-claude}/skills/pm-planner/SKILL.md +46 -1
  370. package/plugins/{pm-cli-codex → pm-codex}/.codex-plugin/plugin.json +3 -3
  371. package/plugins/{pm-cli-codex → pm-codex}/.mcp.json +1 -1
  372. package/plugins/{pm-cli-codex → pm-codex}/README.md +7 -4
  373. package/plugins/{pm-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +4 -2
  374. package/plugins/pm-codex/skills/pm-native/SKILL.md +81 -0
  375. package/scripts/finalize-build.mjs +28 -0
  376. package/scripts/prepare-build-cache.mjs +37 -0
  377. package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +0 -57
  378. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-delivery-chain.md +0 -0
  379. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-triage-agent.md +0 -0
  380. /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-verification-agent.md +0 -0
  381. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-audit.md +0 -0
  382. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-calendar.md +0 -0
  383. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-close-task.md +0 -0
  384. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-developer.md +0 -0
  385. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-list.md +0 -0
  386. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-new.md +0 -0
  387. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-release.md +0 -0
  388. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-search.md +0 -0
  389. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-start-task.md +0 -0
  390. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-status.md +0 -0
  391. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-triage.md +0 -0
  392. /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-workflow.md +0 -0
  393. /package/plugins/{pm-cli-claude → pm-claude}/hooks/hooks.json +0 -0
  394. /package/plugins/{pm-cli-claude → pm-claude}/hooks/session-start.mjs +0 -0
  395. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-audit/SKILL.md +0 -0
  396. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-developer/SKILL.md +0 -0
  397. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-release/SKILL.md +0 -0
  398. /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-workflow/SKILL.md +0 -0
  399. /package/plugins/{pm-cli-codex → pm-codex}/assets/pm-cli-small.svg +0 -0
  400. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-audit.md +0 -0
  401. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-close-task.md +0 -0
  402. /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-start-task.md +0 -0
  403. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/SKILL.md +0 -0
  404. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/agents/openai.yaml +0 -0
  405. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-native/agents/openai.yaml +0 -0
  406. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/SKILL.md +0 -0
  407. /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/agents/openai.yaml +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-agent-guidance.js","sources":["cli/commands/init-agent-guidance.ts"],"sourceRoot":"/","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport { runActiveOnWriteHooks } from \"../../core/extensions/index.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n\nexport type InitAgentGuidanceMode = \"ask\" | \"add\" | \"skip\" | \"status\";\n\nexport const INIT_AGENT_GUIDANCE_MODE_VALUES: InitAgentGuidanceMode[] = [\"ask\", \"add\", \"skip\", \"status\"];\n\nconst AGENT_GUIDANCE_TARGET_FILENAMES = [\"AGENTS.md\", \"CLAUDE.md\"] as const;\nconst AGENT_GUIDANCE_REQUIRED_TOKENS = [\n \"pm init\",\n \"pm context\",\n \"pm search\",\n \"pm create\",\n \"pm claim\",\n \"pm files\",\n \"pm docs\",\n \"pm test --run\",\n \"pm close\",\n \"pm release\",\n \"pm_author\",\n] as const;\nconst AGENT_GUIDANCE_REQUIRED_TOKEN_THRESHOLD = 8;\nconst AGENT_GUIDANCE_TEMPLATE_VERSION = 1;\nconst AGENT_GUIDANCE_START_MARKER_PREFIX = \"<!-- pm-cli:agent-guidance:start:\";\nconst AGENT_GUIDANCE_START_MARKER = `<!-- pm-cli:agent-guidance:start:v${AGENT_GUIDANCE_TEMPLATE_VERSION} -->`;\nconst AGENT_GUIDANCE_END_MARKER = \"<!-- pm-cli:agent-guidance:end -->\";\n\ninterface AgentGuidanceFileScan {\n file_path: string;\n exists: boolean;\n has_guidance: boolean;\n has_marker: boolean;\n}\n\ninterface AgentGuidanceBlockRange {\n start_index: number;\n end_index: number;\n}\n\nexport interface InitAgentGuidanceSummary {\n mode: InitAgentGuidanceMode;\n present: boolean;\n prompted: boolean;\n applied: boolean;\n skipped: boolean;\n declined: boolean;\n prompt_completed: boolean;\n template_version: number;\n target_file: string;\n checked_files: string[];\n files_with_guidance: string[];\n missing_files: string[];\n}\n\nexport interface RunInitAgentGuidanceOptions {\n pm_root: string;\n cwd: string;\n mode: InitAgentGuidanceMode;\n interactive: boolean;\n settings: PmSettings;\n}\n\nexport interface RunInitAgentGuidanceResult {\n summary: InitAgentGuidanceSummary;\n warnings: string[];\n next_steps: string[];\n settings_changed: boolean;\n}\n\nfunction toPortableRelativePath(projectRoot: string, targetPath: string): string {\n const relative = path.relative(projectRoot, targetPath);\n if (relative.length === 0) {\n return path.basename(targetPath);\n }\n return relative.split(path.sep).join(\"/\");\n}\n\nfunction ensureTrailingNewline(value: string): string {\n return value.endsWith(\"\\n\") ? value : `${value}\\n`;\n}\n\nfunction detectLineEnding(value: string): \"\\n\" | \"\\r\\n\" {\n return value.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n}\n\nfunction findGuidanceBlockRange(content: string): AgentGuidanceBlockRange | null {\n const startIndex = content.indexOf(AGENT_GUIDANCE_START_MARKER_PREFIX);\n if (startIndex === -1) {\n return null;\n }\n const endMarkerIndex = content.indexOf(AGENT_GUIDANCE_END_MARKER, startIndex);\n if (endMarkerIndex === -1) {\n return null;\n }\n return {\n start_index: startIndex,\n end_index: endMarkerIndex + AGENT_GUIDANCE_END_MARKER.length,\n };\n}\n\nfunction hasGuidanceMarker(content: string): boolean {\n return findGuidanceBlockRange(content) !== null;\n}\n\nfunction buildAgentGuidanceBlock(lineEnding: \"\\n\" | \"\\r\\n\"): string {\n const lines = [\n AGENT_GUIDANCE_START_MARKER,\n \"## pm Workflow (Agent Quickstart)\",\n \"\",\n \"- Orient before mutate: `pm context --limit 10`, `pm search \\\"<keywords>\\\" --limit 10`, `pm list-open --limit 20`.\",\n \"- Claim and execute: `pm claim <id>` then `pm update <id> --status in_progress`.\",\n \"- Link evidence while coding: `pm files <id> --add ...`, `pm docs <id> --add ...`, `pm test <id> --add command=\\\"node scripts/run-tests.mjs test -- ...\\\"`.\",\n \"- Verify and close: `pm test <id> --run --progress`, `pm close <id> \\\"<evidence>\\\" --validate-close warn`, `pm release <id>`.\",\n \"- Set `PM_AUTHOR=<stable-agent-id>` before mutation commands.\",\n \"\",\n AGENT_GUIDANCE_END_MARKER,\n \"\",\n ];\n return lines.join(lineEnding);\n}\n\nfunction upsertAgentGuidanceBlock(existingContent: string): { next_content: string; changed: boolean } {\n const lineEnding = detectLineEnding(existingContent);\n const nextBlock = buildAgentGuidanceBlock(lineEnding);\n const existingRange = findGuidanceBlockRange(existingContent);\n if (existingRange) {\n const nextContent = ensureTrailingNewline(\n `${existingContent.slice(0, existingRange.start_index)}${nextBlock}${existingContent.slice(existingRange.end_index)}`,\n );\n return {\n next_content: nextContent,\n changed: nextContent !== existingContent,\n };\n }\n const separator = existingContent.length === 0 ? \"\" : existingContent.endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\";\n const nextContent = ensureTrailingNewline(`${existingContent}${separator}${nextBlock}`);\n return {\n next_content: nextContent,\n changed: nextContent !== existingContent,\n };\n}\n\nfunction resolveProjectRoot(pmRoot: string, cwd: string): string {\n const parent = path.dirname(pmRoot);\n if (path.basename(pmRoot) === \"pm\" && path.basename(parent) === \".agents\") {\n return path.dirname(parent);\n }\n return path.resolve(cwd, pmRoot);\n}\n\nfunction resolveTargetGuidancePath(scans: AgentGuidanceFileScan[], projectRoot: string): string {\n const existingAgents = scans.find((entry) => path.basename(entry.file_path) === \"AGENTS.md\" && entry.exists);\n if (existingAgents) {\n return existingAgents.file_path;\n }\n const existingAny = scans.find((entry) => entry.exists);\n if (existingAny) {\n return existingAny.file_path;\n }\n return path.join(projectRoot, \"AGENTS.md\");\n}\n\nfunction parsePromptChoice(answer: string, currentDefault: boolean): boolean {\n const normalized = answer.trim().toLowerCase();\n if (normalized.length === 0) {\n return currentDefault;\n }\n if (normalized === \"y\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"n\" || normalized === \"no\") {\n return false;\n }\n return currentDefault;\n}\n\nasync function promptForGuidanceWrite(targetRelativePath: string): Promise<boolean> {\n const rl = readline.createInterface({ input, output });\n try {\n output.write(\"\\nAgent guidance check\\n\");\n output.write(\"No AGENTS.md/CLAUDE.md file currently contains compact pm workflow guidance.\\n\");\n const answer = await rl.question(`Add a compact pm workflow section to ${targetRelativePath}? [Y/n] `);\n output.write(\"\\n\");\n return parsePromptChoice(answer, true);\n } finally {\n rl.close();\n }\n}\n\nfunction normalizeAgentGuidanceState(settings: PmSettings): PmSettings[\"agent_guidance\"] {\n const current = settings.agent_guidance;\n return {\n prompt_completed: current?.prompt_completed === true,\n declined: current?.declined === true,\n declined_at: typeof current?.declined_at === \"string\" ? current.declined_at : \"\",\n template_version:\n typeof current?.template_version === \"number\" && Number.isInteger(current.template_version) && current.template_version > 0\n ? current.template_version\n : AGENT_GUIDANCE_TEMPLATE_VERSION,\n last_checked_files: Array.isArray(current?.last_checked_files)\n ? [...new Set(current.last_checked_files.map((value) => value.trim()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n )\n : [],\n };\n}\n\nasync function scanGuidanceFiles(projectRoot: string): Promise<AgentGuidanceFileScan[]> {\n const scans: AgentGuidanceFileScan[] = [];\n for (const filename of AGENT_GUIDANCE_TARGET_FILENAMES) {\n const filePath = path.join(projectRoot, filename);\n const exists = await pathExists(filePath);\n if (!exists) {\n scans.push({\n file_path: filePath,\n exists,\n has_guidance: false,\n has_marker: false,\n });\n continue;\n }\n const content = await fs.readFile(filePath, \"utf8\");\n const contentLower = content.toLowerCase();\n const tokenHits = AGENT_GUIDANCE_REQUIRED_TOKENS.filter((token) => contentLower.includes(token));\n const hasMarker = hasGuidanceMarker(content);\n scans.push({\n file_path: filePath,\n exists,\n has_guidance: hasMarker || tokenHits.length >= AGENT_GUIDANCE_REQUIRED_TOKEN_THRESHOLD,\n has_marker: hasMarker,\n });\n }\n return scans;\n}\n\nfunction pushUnique(target: string[], value: string): void {\n if (!target.includes(value)) {\n target.push(value);\n }\n}\n\nfunction applyAgentGuidanceState(\n settings: PmSettings,\n currentState: PmSettings[\"agent_guidance\"],\n): { changed: boolean; state: PmSettings[\"agent_guidance\"] } {\n const existing = normalizeAgentGuidanceState(settings);\n const changed = JSON.stringify(existing) !== JSON.stringify(currentState);\n if (changed) {\n settings.agent_guidance = currentState;\n }\n return { changed, state: currentState };\n}\n\nasync function writeGuidanceFile(filePath: string): Promise<{ changed: boolean; warnings: string[] }> {\n const exists = await pathExists(filePath);\n const currentContent = exists ? await fs.readFile(filePath, \"utf8\") : \"\";\n const nextContent = upsertAgentGuidanceBlock(currentContent);\n if (!nextContent.changed) {\n return { changed: false, warnings: [] };\n }\n await fs.writeFile(filePath, nextContent.next_content, \"utf8\");\n return {\n changed: true,\n warnings: await runActiveOnWriteHooks({\n path: filePath,\n scope: \"project\",\n op: \"init:agent_guidance_file\",\n }),\n };\n}\n\nexport async function runInitAgentGuidance(options: RunInitAgentGuidanceOptions): Promise<RunInitAgentGuidanceResult> {\n const warnings: string[] = [];\n const nextSteps: string[] = [];\n const projectRoot = resolveProjectRoot(options.pm_root, options.cwd);\n let scans = await scanGuidanceFiles(projectRoot);\n const targetPath = resolveTargetGuidancePath(scans, projectRoot);\n const targetRelativePath = toPortableRelativePath(projectRoot, targetPath);\n const addLaterHint = \"Add workflow guidance later: pm init --agent-guidance add\";\n let prompted = false;\n let applied = false;\n let skipped = false;\n let state = normalizeAgentGuidanceState(options.settings);\n const checkedFiles = scans.map((entry) => toPortableRelativePath(projectRoot, entry.file_path));\n const presentBefore = scans.some((entry) => entry.has_guidance);\n\n const markState = (partial: Partial<PmSettings[\"agent_guidance\"]>): void => {\n state = {\n ...state,\n ...partial,\n template_version: AGENT_GUIDANCE_TEMPLATE_VERSION,\n last_checked_files: checkedFiles,\n };\n };\n\n if (options.mode === \"status\") {\n if (!presentBefore) {\n warnings.push(\"agent_guidance:missing\");\n pushUnique(nextSteps, addLaterHint);\n }\n } else if (options.mode === \"skip\") {\n skipped = true;\n markState({\n prompt_completed: true,\n declined: true,\n declined_at: state.declined_at.length > 0 ? state.declined_at : new Date().toISOString(),\n });\n warnings.push(\"agent_guidance:explicit_skip\");\n pushUnique(nextSteps, addLaterHint);\n } else if (options.mode === \"add\") {\n if (!presentBefore) {\n const writeResult = await writeGuidanceFile(targetPath);\n warnings.push(...writeResult.warnings);\n if (writeResult.changed) {\n applied = true;\n warnings.push(`agent_guidance:added:${targetRelativePath}`);\n }\n }\n markState({\n prompt_completed: true,\n declined: false,\n declined_at: \"\",\n });\n } else if (presentBefore) {\n if (state.declined) {\n markState({\n prompt_completed: true,\n declined: false,\n declined_at: \"\",\n });\n }\n } else if (state.prompt_completed && state.declined) {\n skipped = true;\n warnings.push(\"agent_guidance:skipped_declined\");\n pushUnique(nextSteps, addLaterHint);\n } else if (options.interactive) {\n prompted = true;\n const approved = await promptForGuidanceWrite(targetRelativePath);\n if (approved) {\n const writeResult = await writeGuidanceFile(targetPath);\n warnings.push(...writeResult.warnings);\n if (writeResult.changed) {\n applied = true;\n warnings.push(`agent_guidance:added:${targetRelativePath}`);\n }\n markState({\n prompt_completed: true,\n declined: false,\n declined_at: \"\",\n });\n } else {\n skipped = true;\n markState({\n prompt_completed: true,\n declined: true,\n declined_at: new Date().toISOString(),\n });\n warnings.push(\"agent_guidance:declined\");\n pushUnique(nextSteps, addLaterHint);\n }\n } else {\n warnings.push(\"agent_guidance:missing_non_interactive\");\n pushUnique(nextSteps, addLaterHint);\n }\n\n const stateUpdate = applyAgentGuidanceState(options.settings, state);\n if (applied) {\n scans = await scanGuidanceFiles(projectRoot);\n }\n\n const summary: InitAgentGuidanceSummary = {\n mode: options.mode,\n present: scans.some((entry) => entry.has_guidance),\n prompted,\n applied,\n skipped,\n declined: state.declined,\n prompt_completed: state.prompt_completed,\n template_version: state.template_version,\n target_file: targetRelativePath,\n checked_files: scans.map((entry) => toPortableRelativePath(projectRoot, entry.file_path)),\n files_with_guidance: scans\n .filter((entry) => entry.has_guidance)\n .map((entry) => toPortableRelativePath(projectRoot, entry.file_path)),\n missing_files: scans\n .filter((entry) => !entry.exists)\n .map((entry) => toPortableRelativePath(projectRoot, entry.file_path)),\n };\n\n return {\n summary,\n warnings,\n next_steps: nextSteps,\n settings_changed: stateUpdate.changed,\n };\n}\n"],"names":[],"mappings":"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","debugId":"5a5676f5-f102-5fdd-9b33-04645e8971c2"}
@@ -1,5 +1,14 @@
1
1
  import type { GlobalOptions } from "../../core/shared/command-types.js";
2
2
  import type { GovernancePreset, PmSettings } from "../../types/index.js";
3
+ import { type InitAgentGuidanceSummary } from "./init-agent-guidance.js";
4
+ export interface InitInstalledPackagesSummary {
5
+ installed_all: boolean;
6
+ installed_count: number;
7
+ packages: Array<{
8
+ alias: string;
9
+ ok: boolean;
10
+ }>;
11
+ }
3
12
  export interface InitResult {
4
13
  ok: boolean;
5
14
  path: string;
@@ -8,10 +17,15 @@ export interface InitResult {
8
17
  warnings: string[];
9
18
  governance_preset: GovernancePreset;
10
19
  wizard_used: boolean;
20
+ installed_packages?: InitInstalledPackagesSummary;
21
+ next_steps: string[];
22
+ agent_guidance: InitAgentGuidanceSummary;
11
23
  }
12
24
  export interface InitCommandOptions {
13
25
  preset?: string;
14
26
  defaults?: boolean;
15
27
  author?: string;
28
+ withPackages?: boolean;
29
+ agentGuidance?: string;
16
30
  }
17
31
  export declare function runInit(prefixArg: string | undefined, global: GlobalOptions, options?: InitCommandOptions): Promise<InitResult>;
@@ -1,3 +1,5 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5a4618e3-3c73-536b-b252-3c5f9c6556e9")}catch(e){}}();
1
3
  import fs from "node:fs/promises";
2
4
  import path from "node:path";
3
5
  import readline from "node:readline/promises";
@@ -11,6 +13,8 @@ import { EXIT_CODE, GOVERNANCE_PRESET_DEFAULTS, PM_REQUIRED_SUBDIRS, SETTINGS_DE
11
13
  import { PmCliError } from "../../core/shared/errors.js";
12
14
  import { resolvePmRoot } from "../../core/store/paths.js";
13
15
  import { readSettings, writeSettings } from "../../core/store/settings.js";
16
+ import { runExtension } from "./extension.js";
17
+ import { INIT_AGENT_GUIDANCE_MODE_VALUES, runInitAgentGuidance, } from "./init-agent-guidance.js";
14
18
  function cloneDefaults() {
15
19
  return structuredClone(SETTINGS_DEFAULTS);
16
20
  }
@@ -41,6 +45,19 @@ function normalizeOptionalInitAuthor(rawValue) {
41
45
  }
42
46
  return normalized;
43
47
  }
48
+ function normalizeInitAgentGuidanceMode(rawValue) {
49
+ if (rawValue === undefined) {
50
+ return "ask";
51
+ }
52
+ const normalized = rawValue.trim().toLowerCase().replaceAll("-", "_");
53
+ if (normalized.length === 0) {
54
+ throw new PmCliError("--agent-guidance must not be empty", EXIT_CODE.USAGE);
55
+ }
56
+ if (normalized === "ask" || normalized === "add" || normalized === "skip" || normalized === "status") {
57
+ return normalized;
58
+ }
59
+ throw new PmCliError(`Invalid --agent-guidance value "${rawValue}". Allowed: ${INIT_AGENT_GUIDANCE_MODE_VALUES.join(", ")}`, EXIT_CODE.USAGE);
60
+ }
44
61
  function parseYesNoChoice(answer, currentDefault) {
45
62
  const normalized = answer.trim().toLowerCase();
46
63
  if (normalized.length === 0) {
@@ -63,6 +80,19 @@ function applyGovernancePreset(settings, preset) {
63
80
  settings.validation.parent_reference = knobs.parent_reference;
64
81
  settings.validation.metadata_profile = knobs.metadata_profile;
65
82
  }
83
+ function summarizeInstalledPackages(result) {
84
+ const details = result.details;
85
+ return {
86
+ installed_all: details.installed_all === true,
87
+ installed_count: typeof details.installed_count === "number" ? details.installed_count : 0,
88
+ packages: Array.isArray(details.packages)
89
+ ? details.packages.map((entry) => ({
90
+ alias: typeof entry.alias === "string" ? entry.alias : "",
91
+ ok: entry.ok === true,
92
+ }))
93
+ : [],
94
+ };
95
+ }
66
96
  async function runInitWizard(initialPrefix, telemetryDefault) {
67
97
  const rl = readline.createInterface({ input, output });
68
98
  try {
@@ -122,6 +152,8 @@ export async function runInit(prefixArg, global, options = {}) {
122
152
  const presetFromOption = normalizeInitGovernancePreset(options.preset);
123
153
  const useDefaults = options.defaults === true;
124
154
  const authorFromOption = normalizeOptionalInitAuthor(options.author);
155
+ const installBundledPackages = options.withPackages === true;
156
+ const agentGuidanceMode = normalizeInitAgentGuidanceMode(options.agentGuidance);
125
157
  let chosenPreset = presetFromOption;
126
158
  let chosenTelemetryEnabled;
127
159
  let settings;
@@ -169,6 +201,17 @@ export async function runInit(prefixArg, global, options = {}) {
169
201
  }
170
202
  await writeSettings(pmRoot, settings);
171
203
  }
204
+ const agentGuidanceResult = await runInitAgentGuidance({
205
+ pm_root: pmRoot,
206
+ cwd,
207
+ mode: agentGuidanceMode,
208
+ interactive: process.stdin.isTTY === true && process.stdout.isTTY === true,
209
+ settings,
210
+ });
211
+ warnings.push(...agentGuidanceResult.warnings);
212
+ if (agentGuidanceResult.settings_changed) {
213
+ await writeSettings(pmRoot, settings);
214
+ }
172
215
  const runtimeSchemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, settings.schema);
173
216
  for (const createdPath of runtimeSchemaScaffold.created_paths) {
174
217
  createdDirs.push(createdPath);
@@ -198,6 +241,33 @@ export async function runInit(prefixArg, global, options = {}) {
198
241
  op: "init:ensure_dir",
199
242
  })));
200
243
  }
244
+ let installedPackages;
245
+ if (installBundledPackages) {
246
+ const packageInstallResult = await runExtension("all", { install: true, project: true }, global);
247
+ warnings.push(...packageInstallResult.warnings);
248
+ installedPackages = summarizeInstalledPackages(packageInstallResult);
249
+ if (!installedPackages.installed_all || installedPackages.packages.some((entry) => !entry.ok)) {
250
+ throw new PmCliError("pm init --with-packages did not install all bundled packages successfully.", EXIT_CODE.GENERIC_FAILURE);
251
+ }
252
+ }
253
+ const nextSteps = [
254
+ 'Create your first item: pm create --type Task --title "<title>"',
255
+ 'List active items: pm list',
256
+ 'Get agent-friendly project context: pm context',
257
+ ];
258
+ if (!installBundledPackages) {
259
+ nextSteps.push("Add optional packages for richer workflows: pm install calendar --project, pm install templates --project, pm install guide-shell --project");
260
+ nextSteps.push("Or install everything bundled: pm init --with-packages (idempotent on re-run)");
261
+ }
262
+ else {
263
+ nextSteps.push("Explore newly-available commands: pm cal, pm templates, pm guide");
264
+ }
265
+ nextSteps.push("Set PM_AUTHOR=<your-agent-id> so mutations attribute to the right caller.");
266
+ for (const guidanceNextStep of agentGuidanceResult.next_steps) {
267
+ if (!nextSteps.includes(guidanceNextStep)) {
268
+ nextSteps.push(guidanceNextStep);
269
+ }
270
+ }
201
271
  return {
202
272
  ok: true,
203
273
  path: pmRoot,
@@ -206,6 +276,10 @@ export async function runInit(prefixArg, global, options = {}) {
206
276
  warnings,
207
277
  governance_preset: settings.governance.preset,
208
278
  wizard_used: wizardUsed,
279
+ ...(installedPackages ? { installed_packages: installedPackages } : {}),
280
+ next_steps: nextSteps,
281
+ agent_guidance: agentGuidanceResult.summary,
209
282
  };
210
283
  }
211
- //# sourceMappingURL=init.js.map
284
+ //# sourceMappingURL=init.js.map
285
+ //# debugId=5a4618e3-3c73-536b-b252-3c5f9c6556e9
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"/","sources":["cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAE/H,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAmB3E,SAAS,aAAa;IACpB,OAAO,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAC5C,CAAC;AAGD,MAAM,0BAA0B,GAA8B,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAE/F,SAAS,6BAA6B,CAAC,QAA4B;IACjE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACpF,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,UAAU,CAClB,2BAA2B,QAAQ,eAAe,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACzF,SAAS,CAAC,KAAK,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,QAA4B;IAC/D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,cAAuB;IAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAoB,EAAE,MAA+B;IAClF,MAAM,KAAK,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,GAAG;QACpB,MAAM;QACN,GAAG,KAAK;KACT,CAAC;IACF,QAAQ,CAAC,UAAU,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAC9D,QAAQ,CAAC,UAAU,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,aAAqB,EAAE,gBAAyB;IAK3E,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,8FAA8F,CAAC,CAAC;QAE7G,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC9E,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,aAAa,KAAK,CAAC,CAAC;QAC9E,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAEtG,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;QACrG,MAAM,CAAC,KAAK,CAAC,6FAA6F,CAAC,CAAC;QAC5G,MAAM,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;QAC/F,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC,CAAC;QAC1G,MAAM,cAAc,GAAG,6BAA6B,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QAE7H,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACjG,MAAM,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACxD,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,cAAc,IAAI,CAAC,CAAC;QACrG,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAE7E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO;YACL,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,cAAc;YACtB,iBAAiB,EAAE,gBAAgB;SACpC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAA6B,EAC7B,MAAqB,EACrB,UAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,QAAQ,CAAC,IAAI,CACX,GAAG,CAAC,MAAM,qBAAqB,CAAC;YAC9B,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,iBAAiB;SACtB,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IACtD,IAAI,gBAAgB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC9C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,IAAI,YAAY,GAAG,gBAAgB,CAAC;IACpC,IAAI,sBAA2C,CAAC;IAEhD,IAAI,QAAoB,CAAC;IACzB,IAAI,cAAc,EAAE,CAAC;QACnB,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;QAChD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;YACvE,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,gBAAgB,EAAE,CAAC,CAAC;YACvD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,gBAAgB,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACtF,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,6BAA6B,gBAAgB,EAAE,CAAC,CAAC;YAC/D,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,gBAAgB,KAAK,SAAS,IAAI,QAAQ,CAAC,cAAc,KAAK,gBAAgB,EAAE,CAAC;YACnF,QAAQ,CAAC,cAAc,GAAG,gBAAgB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,0BAA0B,gBAAgB,EAAE,CAAC,CAAC;YAC5D,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACpH,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACjG,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;YACxC,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;YACpC,sBAAsB,GAAG,aAAa,CAAC,iBAAiB,CAAC;YACzD,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,eAAe,GAAG,YAAY,IAAI,SAAS,CAAC;QAClD,QAAQ,GAAG,aAAa,EAAE,CAAC;QAC3B,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC;QACtC,qBAAqB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACjD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,QAAQ,CAAC,cAAc,GAAG,gBAAgB,CAAC;QAC7C,CAAC;QACD,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;YACzC,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,sBAAsB,CAAC;YACpD,QAAQ,CAAC,SAAS,CAAC,0BAA0B,GAAG,IAAI,CAAC;QACvD,CAAC;QACD,MAAM,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,qBAAqB,GAAG,MAAM,+BAA+B,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7F,KAAK,MAAM,WAAW,IAAI,qBAAqB,CAAC,aAAa,EAAE,CAAC;QAC9D,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CACX,GAAG,CAAC,MAAM,qBAAqB,CAAC;YAC9B,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,0BAA0B;SAC/B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,uBAAuB,CAAC,QAAQ,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAC1F,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAK,mBAAyC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,QAAQ,CAAC,IAAI,CACX,GAAG,CAAC,MAAM,qBAAqB,CAAC;YAC9B,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,iBAAiB;SACtB,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,MAAM;QACZ,QAAQ;QACR,YAAY,EAAE,WAAW;QACzB,QAAQ;QACR,iBAAiB,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;QAC7C,WAAW,EAAE,UAAU;KACxB,CAAC;AACJ,CAAC","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport { getActiveExtensionRegistrations, runActiveOnWriteHooks } from \"../../core/extensions/index.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { normalizePrefix } from \"../../core/item/id.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { ensureRuntimeSchemaFileScaffold } from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE, GOVERNANCE_PRESET_DEFAULTS, PM_REQUIRED_SUBDIRS, SETTINGS_DEFAULTS } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings, writeSettings } from \"../../core/store/settings.js\";\nimport type { GovernancePreset, PmSettings } from \"../../types/index.js\";\n\nexport interface InitResult {\n ok: boolean;\n path: string;\n settings: PmSettings;\n created_dirs: string[];\n warnings: string[];\n governance_preset: GovernancePreset;\n wizard_used: boolean;\n}\n\nexport interface InitCommandOptions {\n preset?: string;\n defaults?: boolean;\n author?: string;\n}\n\nfunction cloneDefaults(): PmSettings {\n return structuredClone(SETTINGS_DEFAULTS);\n}\n\ntype BuiltinGovernancePreset = Exclude<GovernancePreset, \"custom\">;\nconst BUILTIN_GOVERNANCE_PRESETS: BuiltinGovernancePreset[] = [\"minimal\", \"default\", \"strict\"];\n\nfunction normalizeInitGovernancePreset(rawValue: string | undefined): BuiltinGovernancePreset | undefined {\n if (rawValue === undefined) {\n return undefined;\n }\n const normalized = rawValue.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized.length === 0) {\n throw new PmCliError(\"--preset must not be empty\", EXIT_CODE.USAGE);\n }\n if (normalized === \"minimal\" || normalized === \"default\" || normalized === \"strict\") {\n return normalized;\n }\n if (normalized === \"lite\" || normalized === \"minimum\") {\n return \"minimal\";\n }\n throw new PmCliError(\n `Invalid --preset value \"${rawValue}\". Allowed: ${BUILTIN_GOVERNANCE_PRESETS.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeOptionalInitAuthor(rawValue: string | undefined): string | undefined {\n if (rawValue === undefined) {\n return undefined;\n }\n const normalized = rawValue.trim();\n if (normalized.length === 0) {\n throw new PmCliError(\"--author must not be empty\", EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction parseYesNoChoice(answer: string, currentDefault: boolean): boolean {\n const normalized = answer.trim().toLowerCase();\n if (normalized.length === 0) {\n return currentDefault;\n }\n if (normalized === \"y\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"n\" || normalized === \"no\") {\n return false;\n }\n return currentDefault;\n}\n\nfunction applyGovernancePreset(settings: PmSettings, preset: BuiltinGovernancePreset): void {\n const knobs = GOVERNANCE_PRESET_DEFAULTS[preset];\n settings.governance = {\n preset,\n ...knobs,\n };\n settings.validation.parent_reference = knobs.parent_reference;\n settings.validation.metadata_profile = knobs.metadata_profile;\n}\n\nasync function runInitWizard(initialPrefix: string, telemetryDefault: boolean): Promise<{\n prefix: string;\n preset: BuiltinGovernancePreset;\n telemetry_enabled: boolean;\n}> {\n const rl = readline.createInterface({ input, output });\n try {\n output.write(\"pm init setup wizard (agent-optimized)\\n\");\n output.write(\"This walkthrough is non-destructive and each choice can be changed later with pm config.\\n\\n\");\n\n output.write(\"1/3 Item ID prefix\\n\");\n output.write(\"Prefix is prepended to generated IDs (for example pm-a1b2).\\n\");\n const prefixAnswer = await rl.question(`Item ID prefix [${initialPrefix}]: `);\n const resolvedPrefix = prefixAnswer.trim().length > 0 ? normalizePrefix(prefixAnswer) : initialPrefix;\n\n output.write(\"\\n2/3 Governance preset\\n\");\n output.write(\"minimal: no ownership blocking, progressive create defaults, close validation off.\\n\");\n output.write(\"default: ownership conflict warnings, progressive create defaults, close validation warn.\\n\");\n output.write(\"strict: ownership blocking, strict create defaults, close validation strict.\\n\");\n const presetAnswer = await rl.question(\"Governance preset [minimal/default/strict] (default: minimal): \");\n const resolvedPreset = normalizeInitGovernancePreset(presetAnswer.trim().length > 0 ? presetAnswer : \"minimal\") ?? \"minimal\";\n\n output.write(\"\\n3/3 Project telemetry\\n\");\n output.write(\"Telemetry helps improve reliability and can be disabled anytime via pm config.\\n\");\n const telemetryLabel = telemetryDefault ? \"Y/n\" : \"y/N\";\n const telemetryAnswer = await rl.question(`Enable telemetry for this project? [${telemetryLabel}] `);\n const telemetryEnabled = parseYesNoChoice(telemetryAnswer, telemetryDefault);\n\n output.write(\"\\n\");\n return {\n prefix: resolvedPrefix,\n preset: resolvedPreset,\n telemetry_enabled: telemetryEnabled,\n };\n } finally {\n rl.close();\n }\n}\n\nexport async function runInit(\n prefixArg: string | undefined,\n global: GlobalOptions,\n options: InitCommandOptions = {},\n): Promise<InitResult> {\n const cwd = process.cwd();\n const pmRoot = resolvePmRoot(cwd, global.path);\n const createdDirs: string[] = [];\n const warnings: string[] = [];\n let wizardUsed = false;\n\n for (const subdir of PM_REQUIRED_SUBDIRS) {\n const target = subdir ? path.join(pmRoot, subdir) : pmRoot;\n const existed = await pathExists(target);\n await fs.mkdir(target, { recursive: true });\n if (existed) {\n warnings.push(`already_exists:${target}`);\n } else {\n createdDirs.push(target);\n }\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: target,\n scope: \"project\",\n op: \"init:ensure_dir\",\n })),\n );\n }\n\n const settingsPath = path.join(pmRoot, \"settings.json\");\n const settingsExists = await pathExists(settingsPath);\n let normalizedPrefix = normalizePrefix(prefixArg);\n const presetFromOption = normalizeInitGovernancePreset(options.preset);\n const useDefaults = options.defaults === true;\n const authorFromOption = normalizeOptionalInitAuthor(options.author);\n let chosenPreset = presetFromOption;\n let chosenTelemetryEnabled: boolean | undefined;\n\n let settings: PmSettings;\n if (settingsExists) {\n settings = await readSettings(pmRoot);\n warnings.push(`already_exists:${settingsPath}`);\n let changed = false;\n if (prefixArg !== undefined && settings.id_prefix !== normalizedPrefix) {\n settings.id_prefix = normalizedPrefix;\n warnings.push(`updated:id_prefix:${normalizedPrefix}`);\n changed = true;\n }\n if (presetFromOption !== undefined && settings.governance.preset !== presetFromOption) {\n applyGovernancePreset(settings, presetFromOption);\n warnings.push(`updated:governance_preset:${presetFromOption}`);\n changed = true;\n }\n if (authorFromOption !== undefined && settings.author_default !== authorFromOption) {\n settings.author_default = authorFromOption;\n warnings.push(`updated:author_default:${authorFromOption}`);\n changed = true;\n }\n if (changed) {\n await writeSettings(pmRoot, settings);\n }\n } else {\n if (presetFromOption === undefined && !useDefaults && process.stdin.isTTY === true && process.stdout.isTTY === true) {\n const wizardChoices = await runInitWizard(normalizedPrefix, SETTINGS_DEFAULTS.telemetry.enabled);\n normalizedPrefix = wizardChoices.prefix;\n chosenPreset = wizardChoices.preset;\n chosenTelemetryEnabled = wizardChoices.telemetry_enabled;\n wizardUsed = true;\n }\n const effectivePreset = chosenPreset ?? \"minimal\";\n settings = cloneDefaults();\n settings.id_prefix = normalizedPrefix;\n applyGovernancePreset(settings, effectivePreset);\n if (authorFromOption !== undefined) {\n settings.author_default = authorFromOption;\n }\n if (chosenTelemetryEnabled !== undefined) {\n settings.telemetry.enabled = chosenTelemetryEnabled;\n settings.telemetry.first_run_prompt_completed = true;\n }\n await writeSettings(pmRoot, settings);\n }\n\n const runtimeSchemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, settings.schema);\n for (const createdPath of runtimeSchemaScaffold.created_paths) {\n createdDirs.push(createdPath);\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: createdPath,\n scope: \"project\",\n op: \"init:runtime_schema_file\",\n })),\n );\n }\n\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n for (const typeFolder of typeRegistry.folders) {\n if ((PM_REQUIRED_SUBDIRS as readonly string[]).includes(typeFolder)) {\n continue;\n }\n const target = path.join(pmRoot, typeFolder);\n const existed = await pathExists(target);\n await fs.mkdir(target, { recursive: true });\n if (existed) {\n warnings.push(`already_exists:${target}`);\n } else {\n createdDirs.push(target);\n }\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: target,\n scope: \"project\",\n op: \"init:ensure_dir\",\n })),\n );\n }\n\n return {\n ok: true,\n path: pmRoot,\n settings,\n created_dirs: createdDirs,\n warnings,\n governance_preset: settings.governance.preset,\n wizard_used: wizardUsed,\n };\n}\n"]}
1
+ {"version":3,"file":"init.js","sources":["cli/commands/init.ts"],"sourceRoot":"/","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport { getActiveExtensionRegistrations, runActiveOnWriteHooks } from \"../../core/extensions/index.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { normalizePrefix } from \"../../core/item/id.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { ensureRuntimeSchemaFileScaffold } from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE, GOVERNANCE_PRESET_DEFAULTS, PM_REQUIRED_SUBDIRS, SETTINGS_DEFAULTS } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings, writeSettings } from \"../../core/store/settings.js\";\nimport type { GovernancePreset, PmSettings } from \"../../types/index.js\";\nimport { runExtension, type ExtensionCommandResult } from \"./extension.js\";\nimport {\n INIT_AGENT_GUIDANCE_MODE_VALUES,\n runInitAgentGuidance,\n type InitAgentGuidanceMode,\n type InitAgentGuidanceSummary,\n} from \"./init-agent-guidance.js\";\n\nexport interface InitInstalledPackagesSummary {\n installed_all: boolean;\n installed_count: number;\n packages: Array<{\n alias: string;\n ok: boolean;\n }>;\n}\n\nexport interface InitResult {\n ok: boolean;\n path: string;\n settings: PmSettings;\n created_dirs: string[];\n warnings: string[];\n governance_preset: GovernancePreset;\n wizard_used: boolean;\n installed_packages?: InitInstalledPackagesSummary;\n next_steps: string[];\n agent_guidance: InitAgentGuidanceSummary;\n}\n\nexport interface InitCommandOptions {\n preset?: string;\n defaults?: boolean;\n author?: string;\n withPackages?: boolean;\n agentGuidance?: string;\n}\n\nfunction cloneDefaults(): PmSettings {\n return structuredClone(SETTINGS_DEFAULTS);\n}\n\ntype BuiltinGovernancePreset = Exclude<GovernancePreset, \"custom\">;\nconst BUILTIN_GOVERNANCE_PRESETS: BuiltinGovernancePreset[] = [\"minimal\", \"default\", \"strict\"];\n\nfunction normalizeInitGovernancePreset(rawValue: string | undefined): BuiltinGovernancePreset | undefined {\n if (rawValue === undefined) {\n return undefined;\n }\n const normalized = rawValue.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized.length === 0) {\n throw new PmCliError(\"--preset must not be empty\", EXIT_CODE.USAGE);\n }\n if (normalized === \"minimal\" || normalized === \"default\" || normalized === \"strict\") {\n return normalized;\n }\n if (normalized === \"lite\" || normalized === \"minimum\") {\n return \"minimal\";\n }\n throw new PmCliError(\n `Invalid --preset value \"${rawValue}\". Allowed: ${BUILTIN_GOVERNANCE_PRESETS.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeOptionalInitAuthor(rawValue: string | undefined): string | undefined {\n if (rawValue === undefined) {\n return undefined;\n }\n const normalized = rawValue.trim();\n if (normalized.length === 0) {\n throw new PmCliError(\"--author must not be empty\", EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction normalizeInitAgentGuidanceMode(rawValue: string | undefined): InitAgentGuidanceMode {\n if (rawValue === undefined) {\n return \"ask\";\n }\n const normalized = rawValue.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized.length === 0) {\n throw new PmCliError(\"--agent-guidance must not be empty\", EXIT_CODE.USAGE);\n }\n if (normalized === \"ask\" || normalized === \"add\" || normalized === \"skip\" || normalized === \"status\") {\n return normalized;\n }\n throw new PmCliError(\n `Invalid --agent-guidance value \"${rawValue}\". Allowed: ${INIT_AGENT_GUIDANCE_MODE_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction parseYesNoChoice(answer: string, currentDefault: boolean): boolean {\n const normalized = answer.trim().toLowerCase();\n if (normalized.length === 0) {\n return currentDefault;\n }\n if (normalized === \"y\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"n\" || normalized === \"no\") {\n return false;\n }\n return currentDefault;\n}\n\nfunction applyGovernancePreset(settings: PmSettings, preset: BuiltinGovernancePreset): void {\n const knobs = GOVERNANCE_PRESET_DEFAULTS[preset];\n settings.governance = {\n preset,\n ...knobs,\n };\n settings.validation.parent_reference = knobs.parent_reference;\n settings.validation.metadata_profile = knobs.metadata_profile;\n}\n\nfunction summarizeInstalledPackages(result: ExtensionCommandResult): InitInstalledPackagesSummary {\n const details = result.details as {\n installed_all?: unknown;\n installed_count?: unknown;\n packages?: Array<{\n alias?: unknown;\n ok?: unknown;\n }>;\n };\n return {\n installed_all: details.installed_all === true,\n installed_count: typeof details.installed_count === \"number\" ? details.installed_count : 0,\n packages: Array.isArray(details.packages)\n ? details.packages.map((entry) => ({\n alias: typeof entry.alias === \"string\" ? entry.alias : \"\",\n ok: entry.ok === true,\n }))\n : [],\n };\n}\n\nasync function runInitWizard(initialPrefix: string, telemetryDefault: boolean): Promise<{\n prefix: string;\n preset: BuiltinGovernancePreset;\n telemetry_enabled: boolean;\n}> {\n const rl = readline.createInterface({ input, output });\n try {\n output.write(\"pm init setup wizard (agent-optimized)\\n\");\n output.write(\"This walkthrough is non-destructive and each choice can be changed later with pm config.\\n\\n\");\n\n output.write(\"1/3 Item ID prefix\\n\");\n output.write(\"Prefix is prepended to generated IDs (for example pm-a1b2).\\n\");\n const prefixAnswer = await rl.question(`Item ID prefix [${initialPrefix}]: `);\n const resolvedPrefix = prefixAnswer.trim().length > 0 ? normalizePrefix(prefixAnswer) : initialPrefix;\n\n output.write(\"\\n2/3 Governance preset\\n\");\n output.write(\"minimal: no ownership blocking, progressive create defaults, close validation off.\\n\");\n output.write(\"default: ownership conflict warnings, progressive create defaults, close validation warn.\\n\");\n output.write(\"strict: ownership blocking, strict create defaults, close validation strict.\\n\");\n const presetAnswer = await rl.question(\"Governance preset [minimal/default/strict] (default: minimal): \");\n const resolvedPreset = normalizeInitGovernancePreset(presetAnswer.trim().length > 0 ? presetAnswer : \"minimal\") ?? \"minimal\";\n\n output.write(\"\\n3/3 Project telemetry\\n\");\n output.write(\"Telemetry helps improve reliability and can be disabled anytime via pm config.\\n\");\n const telemetryLabel = telemetryDefault ? \"Y/n\" : \"y/N\";\n const telemetryAnswer = await rl.question(`Enable telemetry for this project? [${telemetryLabel}] `);\n const telemetryEnabled = parseYesNoChoice(telemetryAnswer, telemetryDefault);\n\n output.write(\"\\n\");\n return {\n prefix: resolvedPrefix,\n preset: resolvedPreset,\n telemetry_enabled: telemetryEnabled,\n };\n } finally {\n rl.close();\n }\n}\n\nexport async function runInit(\n prefixArg: string | undefined,\n global: GlobalOptions,\n options: InitCommandOptions = {},\n): Promise<InitResult> {\n const cwd = process.cwd();\n const pmRoot = resolvePmRoot(cwd, global.path);\n const createdDirs: string[] = [];\n const warnings: string[] = [];\n let wizardUsed = false;\n\n for (const subdir of PM_REQUIRED_SUBDIRS) {\n const target = subdir ? path.join(pmRoot, subdir) : pmRoot;\n const existed = await pathExists(target);\n await fs.mkdir(target, { recursive: true });\n if (existed) {\n warnings.push(`already_exists:${target}`);\n } else {\n createdDirs.push(target);\n }\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: target,\n scope: \"project\",\n op: \"init:ensure_dir\",\n })),\n );\n }\n\n const settingsPath = path.join(pmRoot, \"settings.json\");\n const settingsExists = await pathExists(settingsPath);\n let normalizedPrefix = normalizePrefix(prefixArg);\n const presetFromOption = normalizeInitGovernancePreset(options.preset);\n const useDefaults = options.defaults === true;\n const authorFromOption = normalizeOptionalInitAuthor(options.author);\n const installBundledPackages = options.withPackages === true;\n const agentGuidanceMode = normalizeInitAgentGuidanceMode(options.agentGuidance);\n let chosenPreset = presetFromOption;\n let chosenTelemetryEnabled: boolean | undefined;\n\n let settings: PmSettings;\n if (settingsExists) {\n settings = await readSettings(pmRoot);\n warnings.push(`already_exists:${settingsPath}`);\n let changed = false;\n if (prefixArg !== undefined && settings.id_prefix !== normalizedPrefix) {\n settings.id_prefix = normalizedPrefix;\n warnings.push(`updated:id_prefix:${normalizedPrefix}`);\n changed = true;\n }\n if (presetFromOption !== undefined && settings.governance.preset !== presetFromOption) {\n applyGovernancePreset(settings, presetFromOption);\n warnings.push(`updated:governance_preset:${presetFromOption}`);\n changed = true;\n }\n if (authorFromOption !== undefined && settings.author_default !== authorFromOption) {\n settings.author_default = authorFromOption;\n warnings.push(`updated:author_default:${authorFromOption}`);\n changed = true;\n }\n if (changed) {\n await writeSettings(pmRoot, settings);\n }\n } else {\n if (presetFromOption === undefined && !useDefaults && process.stdin.isTTY === true && process.stdout.isTTY === true) {\n const wizardChoices = await runInitWizard(normalizedPrefix, SETTINGS_DEFAULTS.telemetry.enabled);\n normalizedPrefix = wizardChoices.prefix;\n chosenPreset = wizardChoices.preset;\n chosenTelemetryEnabled = wizardChoices.telemetry_enabled;\n wizardUsed = true;\n }\n const effectivePreset = chosenPreset ?? \"minimal\";\n settings = cloneDefaults();\n settings.id_prefix = normalizedPrefix;\n applyGovernancePreset(settings, effectivePreset);\n if (authorFromOption !== undefined) {\n settings.author_default = authorFromOption;\n }\n if (chosenTelemetryEnabled !== undefined) {\n settings.telemetry.enabled = chosenTelemetryEnabled;\n settings.telemetry.first_run_prompt_completed = true;\n }\n await writeSettings(pmRoot, settings);\n }\n\n const agentGuidanceResult = await runInitAgentGuidance({\n pm_root: pmRoot,\n cwd,\n mode: agentGuidanceMode,\n interactive: process.stdin.isTTY === true && process.stdout.isTTY === true,\n settings,\n });\n warnings.push(...agentGuidanceResult.warnings);\n if (agentGuidanceResult.settings_changed) {\n await writeSettings(pmRoot, settings);\n }\n\n const runtimeSchemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, settings.schema);\n for (const createdPath of runtimeSchemaScaffold.created_paths) {\n createdDirs.push(createdPath);\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: createdPath,\n scope: \"project\",\n op: \"init:runtime_schema_file\",\n })),\n );\n }\n\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n for (const typeFolder of typeRegistry.folders) {\n if ((PM_REQUIRED_SUBDIRS as readonly string[]).includes(typeFolder)) {\n continue;\n }\n const target = path.join(pmRoot, typeFolder);\n const existed = await pathExists(target);\n await fs.mkdir(target, { recursive: true });\n if (existed) {\n warnings.push(`already_exists:${target}`);\n } else {\n createdDirs.push(target);\n }\n warnings.push(\n ...(await runActiveOnWriteHooks({\n path: target,\n scope: \"project\",\n op: \"init:ensure_dir\",\n })),\n );\n }\n\n let installedPackages: InitInstalledPackagesSummary | undefined;\n if (installBundledPackages) {\n const packageInstallResult = await runExtension(\"all\", { install: true, project: true }, global);\n warnings.push(...packageInstallResult.warnings);\n installedPackages = summarizeInstalledPackages(packageInstallResult);\n if (!installedPackages.installed_all || installedPackages.packages.some((entry) => !entry.ok)) {\n throw new PmCliError(\"pm init --with-packages did not install all bundled packages successfully.\", EXIT_CODE.GENERIC_FAILURE);\n }\n }\n\n const nextSteps: string[] = [\n 'Create your first item: pm create --type Task --title \"<title>\"',\n 'List active items: pm list',\n 'Get agent-friendly project context: pm context',\n ];\n if (!installBundledPackages) {\n nextSteps.push(\n \"Add optional packages for richer workflows: pm install calendar --project, pm install templates --project, pm install guide-shell --project\",\n );\n nextSteps.push(\"Or install everything bundled: pm init --with-packages (idempotent on re-run)\");\n } else {\n nextSteps.push(\"Explore newly-available commands: pm cal, pm templates, pm guide\");\n }\n nextSteps.push(\"Set PM_AUTHOR=<your-agent-id> so mutations attribute to the right caller.\");\n for (const guidanceNextStep of agentGuidanceResult.next_steps) {\n if (!nextSteps.includes(guidanceNextStep)) {\n nextSteps.push(guidanceNextStep);\n }\n }\n\n return {\n ok: true,\n path: pmRoot,\n settings,\n created_dirs: createdDirs,\n warnings,\n governance_preset: settings.governance.preset,\n wizard_used: wizardUsed,\n ...(installedPackages ? { installed_packages: installedPackages } : {}),\n next_steps: nextSteps,\n agent_guidance: agentGuidanceResult.summary,\n };\n}\n"],"names":[],"mappings":"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","debugId":"5a4618e3-3c73-536b-b252-3c5f9c6556e9"}
@@ -1,3 +1,5 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="639c3678-d362-5aaa-ad2e-b3f2138d3ef7")}catch(e){}}();
1
3
  import { pathExists } from "../../core/fs/fs-utils.js";
2
4
  import { getActiveExtensionRegistrations } from "../../core/extensions/index.js";
3
5
  import { resolveItemTypeRegistry } from "../../core/item/type-registry.js";
@@ -118,4 +120,5 @@ export async function runLearnings(id, options, global) {
118
120
  count: learnings.length,
119
121
  };
120
122
  }
121
- //# sourceMappingURL=learnings.js.map
123
+ //# sourceMappingURL=learnings.js.map
124
+ //# debugId=639c3678-d362-5aaa-ad2e-b3f2138d3ef7
@@ -1 +1 @@
1
- {"version":3,"file":"learnings.js","sourceRoot":"/","sources":["cli/commands/learnings.ts"],"names":[],"mappings":"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","sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { createStdinTokenResolver, parseCsvKv } from \"../../core/item/parse.js\";\nimport { locateItem, mutateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { parseLimit } from \"../shared-parsers.js\";\nimport type { LogNote } from \"../../types/index.js\";\n\nexport interface LearningsCommandOptions {\n add?: string;\n limit?: string;\n author?: string;\n message?: string;\n allowAuditLearning?: boolean;\n allowAuditComment?: boolean;\n force?: boolean;\n}\n\nexport interface LearningsResult {\n id: string;\n learnings: LogNote[];\n count: number;\n}\n\nfunction resolveAuthor(candidate: string | undefined, fallback: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;\n const trimmed = resolved.trim();\n return trimmed || \"unknown\";\n}\n\nfunction limitLearnings(values: LogNote[], limit: number | undefined): LogNote[] {\n if (limit === undefined) return values;\n if (limit === 0) return [];\n return values.slice(Math.max(0, values.length - limit));\n}\n\nfunction parseLearningTextInput(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return \"\";\n }\n const looksStructured = /^(?:[-*+]\\s*)?text\\s*[:=]/im.test(trimmed) || trimmed.startsWith(\"```\");\n if (!looksStructured) {\n return trimmed;\n }\n try {\n const kv = parseCsvKv(trimmed, \"--add\");\n const keys = Object.keys(kv).map((key) => key.trim().toLowerCase());\n if (keys.some((key) => key !== \"text\")) {\n return trimmed;\n }\n const text = kv.text?.trim();\n return text || trimmed;\n } catch {\n return trimmed;\n }\n}\n\nexport async function runLearnings(\n id: string,\n options: LearningsCommandOptions,\n global: GlobalOptions,\n): Promise<LearningsResult> {\n const stdinResolver = createStdinTokenResolver();\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const limit = parseLimit(options.limit);\n\n if (options.add === undefined) {\n const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);\n if (!located) {\n throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: settings.schema });\n const learnings = limitLearnings(loaded.document.metadata.learnings ?? [], limit);\n return {\n id: located.id,\n learnings,\n count: learnings.length,\n };\n }\n\n const author = resolveAuthor(options.author, settings.author_default);\n const addInput = await stdinResolver.resolveValue(options.add, \"--add\");\n const text = parseLearningTextInput(addInput ?? \"\");\n if (!text) {\n throw new PmCliError(\"--add text cannot be empty\", EXIT_CODE.USAGE);\n }\n\n let result: Awaited<ReturnType<typeof mutateItem>>;\n try {\n result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: \"learning_add\",\n author,\n message: options.message,\n force: options.force,\n bypassAssigneeConflict: Boolean(options.allowAuditLearning || options.allowAuditComment),\n mutate(document) {\n const learnings = document.metadata.learnings ?? [];\n learnings.push({\n created_at: nowIso(),\n author,\n text,\n });\n document.metadata.learnings = learnings;\n return { changedFields: [\"learnings\"] };\n },\n });\n } catch (error: unknown) {\n if (\n error instanceof PmCliError &&\n error.exitCode === EXIT_CODE.CONFLICT &&\n error.message.includes(\"is assigned to\") &&\n error.message.includes(\"Use --force to override\")\n ) {\n throw new PmCliError(error.message, error.exitCode, {\n code: \"ownership_conflict\",\n required:\n \"For append-only learning audits on another owner's item, prefer --allow-audit-learning (legacy alias: --allow-audit-comment) before considering --force.\",\n examples: ['pm learnings pm-a1b2 --add \"audit learning\" --author \"reviewer\" --allow-audit-learning'],\n nextSteps: [\n \"Retry with --allow-audit-learning (or legacy --allow-audit-comment) for append-only learning audits that do not mutate item metadata beyond learnings.\",\n \"Use --force only when an ownership override is explicitly approved.\",\n ],\n });\n }\n throw error;\n }\n\n const learnings = limitLearnings(result.item.learnings as LogNote[], limit);\n return {\n id: result.item.id,\n learnings,\n count: learnings.length,\n };\n}\n"]}
1
+ {"version":3,"file":"learnings.js","sources":["cli/commands/learnings.ts"],"sourceRoot":"/","sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { createStdinTokenResolver, parseCsvKv } from \"../../core/item/parse.js\";\nimport { locateItem, mutateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { parseLimit } from \"../shared-parsers.js\";\nimport type { LogNote } from \"../../types/index.js\";\n\nexport interface LearningsCommandOptions {\n add?: string;\n limit?: string;\n author?: string;\n message?: string;\n allowAuditLearning?: boolean;\n allowAuditComment?: boolean;\n force?: boolean;\n}\n\nexport interface LearningsResult {\n id: string;\n learnings: LogNote[];\n count: number;\n}\n\nfunction resolveAuthor(candidate: string | undefined, fallback: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;\n const trimmed = resolved.trim();\n return trimmed || \"unknown\";\n}\n\nfunction limitLearnings(values: LogNote[], limit: number | undefined): LogNote[] {\n if (limit === undefined) return values;\n if (limit === 0) return [];\n return values.slice(Math.max(0, values.length - limit));\n}\n\nfunction parseLearningTextInput(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return \"\";\n }\n const looksStructured = /^(?:[-*+]\\s*)?text\\s*[:=]/im.test(trimmed) || trimmed.startsWith(\"```\");\n if (!looksStructured) {\n return trimmed;\n }\n try {\n const kv = parseCsvKv(trimmed, \"--add\");\n const keys = Object.keys(kv).map((key) => key.trim().toLowerCase());\n if (keys.some((key) => key !== \"text\")) {\n return trimmed;\n }\n const text = kv.text?.trim();\n return text || trimmed;\n } catch {\n return trimmed;\n }\n}\n\nexport async function runLearnings(\n id: string,\n options: LearningsCommandOptions,\n global: GlobalOptions,\n): Promise<LearningsResult> {\n const stdinResolver = createStdinTokenResolver();\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const limit = parseLimit(options.limit);\n\n if (options.add === undefined) {\n const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);\n if (!located) {\n throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: settings.schema });\n const learnings = limitLearnings(loaded.document.metadata.learnings ?? [], limit);\n return {\n id: located.id,\n learnings,\n count: learnings.length,\n };\n }\n\n const author = resolveAuthor(options.author, settings.author_default);\n const addInput = await stdinResolver.resolveValue(options.add, \"--add\");\n const text = parseLearningTextInput(addInput ?? \"\");\n if (!text) {\n throw new PmCliError(\"--add text cannot be empty\", EXIT_CODE.USAGE);\n }\n\n let result: Awaited<ReturnType<typeof mutateItem>>;\n try {\n result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: \"learning_add\",\n author,\n message: options.message,\n force: options.force,\n bypassAssigneeConflict: Boolean(options.allowAuditLearning || options.allowAuditComment),\n mutate(document) {\n const learnings = document.metadata.learnings ?? [];\n learnings.push({\n created_at: nowIso(),\n author,\n text,\n });\n document.metadata.learnings = learnings;\n return { changedFields: [\"learnings\"] };\n },\n });\n } catch (error: unknown) {\n if (\n error instanceof PmCliError &&\n error.exitCode === EXIT_CODE.CONFLICT &&\n error.message.includes(\"is assigned to\") &&\n error.message.includes(\"Use --force to override\")\n ) {\n throw new PmCliError(error.message, error.exitCode, {\n code: \"ownership_conflict\",\n required:\n \"For append-only learning audits on another owner's item, prefer --allow-audit-learning (legacy alias: --allow-audit-comment) before considering --force.\",\n examples: ['pm learnings pm-a1b2 --add \"audit learning\" --author \"reviewer\" --allow-audit-learning'],\n nextSteps: [\n \"Retry with --allow-audit-learning (or legacy --allow-audit-comment) for append-only learning audits that do not mutate item metadata beyond learnings.\",\n \"Use --force only when an ownership override is explicitly approved.\",\n ],\n });\n }\n throw error;\n }\n\n const learnings = limitLearnings(result.item.learnings as LogNote[], limit);\n return {\n id: result.item.id,\n learnings,\n count: learnings.length,\n };\n}\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAmBlD,SAAS,aAAa,CAAC,SAA6B,EAAE,QAAgB;IACpE,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC;IAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,MAAiB,EAAE,KAAyB;IAClE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,eAAe,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAC7B,OAAO,IAAI,IAAI,OAAO,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAU,EACV,OAAgC,EAChC,MAAqB;IAErB,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,UAAU,CAAC,iCAAiC,MAAM,sBAAsB,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3G,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,uBAAuB,CAAC,QAAQ,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;QACpH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QAClF,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS;YACT,KAAK,EAAE,SAAS,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,MAA8C,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,CAAC;YACxB,MAAM;YACN,QAAQ;YACR,EAAE;YACF,EAAE,EAAE,cAAc;YAClB,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,sBAAsB,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,CAAC;YACxF,MAAM,CAAC,QAAQ;gBACb,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;gBACpD,SAAS,CAAC,IAAI,CAAC;oBACb,UAAU,EAAE,MAAM,EAAE;oBACpB,MAAM;oBACN,IAAI;iBACL,CAAC,CAAC;gBACH,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;gBACxC,OAAO,EAAE,aAAa,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IACE,KAAK,YAAY,UAAU;YAC3B,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;YACrC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACxC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EACjD,CAAC;YACD,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE;gBAClD,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EACN,0JAA0J;gBAC5J,QAAQ,EAAE,CAAC,wFAAwF,CAAC;gBACpG,SAAS,EAAE;oBACT,wJAAwJ;oBACxJ,qEAAqE;iBACtE;aACF,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,SAAsB,EAAE,KAAK,CAAC,CAAC;IAC5E,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QAClB,SAAS;QACT,KAAK,EAAE,SAAS,CAAC,MAAM;KACxB,CAAC;AACJ,CAAC","debugId":"639c3678-d362-5aaa-ad2e-b3f2138d3ef7"}
@@ -17,6 +17,7 @@ export interface ListOptions {
17
17
  includeBody?: boolean;
18
18
  compact?: boolean;
19
19
  brief?: boolean;
20
+ full?: boolean;
20
21
  fields?: string;
21
22
  sort?: string;
22
23
  order?: string;
@@ -1,3 +1,5 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5a5182ef-314f-551d-adbf-df52067ef6b3")}catch(e){}}();
1
3
  import { pathExists } from "../../core/fs/fs-utils.js";
2
4
  import { getActiveExtensionRegistrations } from "../../core/extensions/index.js";
3
5
  import { normalizeStatusInput } from "../../core/item/status.js";
@@ -33,7 +35,7 @@ function compareDefaultSort(left, right, statusRegistry) {
33
35
  if (byUpdated !== 0) {
34
36
  return byUpdated;
35
37
  }
36
- return left.id.localeCompare(right.id);
38
+ return (left.id ?? "").localeCompare(right.id ?? "");
37
39
  }
38
40
  function sortItemsDefault(items, statusRegistry) {
39
41
  return [...items].sort((left, right) => compareDefaultSort(left, right, statusRegistry));
@@ -68,10 +70,17 @@ function parseFieldSelectors(raw) {
68
70
  function parseProjectionConfig(options) {
69
71
  const compactRequested = options.compact === true;
70
72
  const briefRequested = options.brief === true;
73
+ const fullRequested = options.full === true;
71
74
  const fieldSelectors = parseFieldSelectors(options.fields);
72
- const enabledModes = Number(compactRequested) + Number(briefRequested) + Number(fieldSelectors !== undefined);
75
+ const enabledModes = Number(compactRequested) + Number(briefRequested) + Number(fullRequested) + Number(fieldSelectors !== undefined);
73
76
  if (enabledModes > 1) {
74
- throw new PmCliError("List projection options are mutually exclusive. Use one of --compact, --brief, or --fields.", EXIT_CODE.USAGE);
77
+ throw new PmCliError("List projection options are mutually exclusive. Use one of --compact, --brief, --full, or --fields.", EXIT_CODE.USAGE);
78
+ }
79
+ if (fullRequested) {
80
+ return {
81
+ mode: "full",
82
+ fields: [],
83
+ };
75
84
  }
76
85
  if (briefRequested) {
77
86
  return {
@@ -129,24 +138,33 @@ function parseAssigneeFilter(raw) {
129
138
  }
130
139
  return normalized;
131
140
  }
141
+ function resolveSingleStatusToken(token, statusRegistry) {
142
+ const trimmed = token.trim().toLowerCase();
143
+ if (trimmed === "open")
144
+ return statusRegistry.open_status;
145
+ if (trimmed === "closed")
146
+ return statusRegistry.close_status;
147
+ if (trimmed === "canceled" || trimmed === "cancelled")
148
+ return statusRegistry.canceled_status;
149
+ const normalized = normalizeStatusInput(token, statusRegistry);
150
+ return normalized ?? token;
151
+ }
132
152
  function resolveStatusFilter(status, statusRegistry) {
133
153
  if (status === undefined) {
134
154
  return undefined;
135
155
  }
136
- const normalized = normalizeStatusInput(status, statusRegistry);
137
- const token = status.trim().toLowerCase();
138
- if (token === "open") {
139
- return statusRegistry.open_status;
140
- }
141
- if (token === "closed") {
142
- return statusRegistry.close_status;
143
- }
144
- if (token === "canceled" || token === "cancelled") {
145
- return statusRegistry.canceled_status;
156
+ const tokens = String(status)
157
+ .split(",")
158
+ .map((entry) => entry.trim())
159
+ .filter((entry) => entry.length > 0);
160
+ if (tokens.length === 0) {
161
+ return undefined;
146
162
  }
147
- return normalized ?? status;
163
+ const resolved = tokens.map((token) => resolveSingleStatusToken(token, statusRegistry));
164
+ return [...new Set(resolved)];
148
165
  }
149
166
  function applyFilters(items, status, options, typeRegistry, statusRegistry, runtimeFieldFilters) {
167
+ const statusSet = status && status.length > 0 ? new Set(status) : undefined;
150
168
  const typeFilter = parseType(options.type, typeRegistry);
151
169
  const tagFilter = options.tag?.trim().toLowerCase();
152
170
  const priorityFilter = parsePriority(options.priority);
@@ -164,7 +182,7 @@ function applyFilters(items, status, options, typeRegistry, statusRegistry, runt
164
182
  throw new PmCliError("Cannot combine --assignee with --assignee-filter unassigned", EXIT_CODE.USAGE);
165
183
  }
166
184
  return items.filter((item) => {
167
- if (status && item.status !== status)
185
+ if (statusSet && !statusSet.has(item.status))
168
186
  return false;
169
187
  if (options.excludeTerminal && isTerminal(item.status, statusRegistry))
170
188
  return false;
@@ -232,7 +250,7 @@ function compareBySortField(left, right, field) {
232
250
  case "created_at":
233
251
  return compareTimestampStrings(left.created_at, right.created_at);
234
252
  case "title":
235
- return left.title.localeCompare(right.title);
253
+ return (left.title ?? "").localeCompare(right.title ?? "");
236
254
  case "parent":
237
255
  return compareNullableString(left.parent ?? null, right.parent ?? null);
238
256
  default:
@@ -307,6 +325,11 @@ export async function runList(status, options, global) {
307
325
  const resolvedStatus = explicitStatus ?? resolveStatusFilter(status, statusRegistry);
308
326
  const effectiveOptions = explicitStatus ? { ...options, excludeTerminal: false } : options;
309
327
  const filtered = applyFilters(items, resolvedStatus, effectiveOptions, typeRegistry, statusRegistry, runtimeFieldFilters);
328
+ const filtersStatus = resolvedStatus === undefined
329
+ ? null
330
+ : resolvedStatus.length === 1
331
+ ? resolvedStatus[0]
332
+ : resolvedStatus;
310
333
  const sorted = sortItems(filtered, sortField, sortOrder, statusRegistry);
311
334
  const limit = parseIntegerLimit(options.limit);
312
335
  const offset = parseOffset(options.offset) ?? 0;
@@ -319,7 +342,7 @@ export async function runList(status, options, global) {
319
342
  items: projected,
320
343
  count: projected.length,
321
344
  filters: {
322
- status: resolvedStatus ?? null,
345
+ status: filtersStatus,
323
346
  type: options.type ?? null,
324
347
  tag: options.tag ?? null,
325
348
  priority: options.priority ?? null,
@@ -352,4 +375,5 @@ export async function runList(status, options, global) {
352
375
  ...(warnings.length > 0 ? { warnings } : {}),
353
376
  };
354
377
  }
355
- //# sourceMappingURL=list.js.map
378
+ //# sourceMappingURL=list.js.map
379
+ //# debugId=5a5182ef-314f-551d-adbf-df52067ef6b3