@unbrained/pm-cli 2026.8.26 → 2026.8.28

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 (196) hide show
  1. package/.agents/skills/HARNESS_COMPATIBILITY.md +32 -0
  2. package/.agents/skills/README.md +47 -0
  3. package/.agents/skills/pm-developer/SKILL.md +117 -0
  4. package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +49 -0
  5. package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +91 -0
  6. package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +72 -0
  7. package/.agents/skills/pm-developer/references/PROMPTS.md +17 -0
  8. package/.agents/skills/pm-developer/references/SCRIPTING_COMPOSITION.md +82 -0
  9. package/.agents/skills/pm-developer/references/TOKEN_BUDGETS.md +85 -0
  10. package/.agents/skills/pm-extensions/SKILL.md +106 -0
  11. package/.agents/skills/pm-extensions/references/AUTHORING.md +95 -0
  12. package/.agents/skills/pm-extensions/references/LIFECYCLE.md +40 -0
  13. package/.agents/skills/pm-extensions/references/TROUBLESHOOTING.md +25 -0
  14. package/.agents/skills/pm-sdk/SKILL.md +107 -0
  15. package/.agents/skills/pm-sdk/references/DOMAIN_MODELING.md +78 -0
  16. package/.agents/skills/pm-sdk/references/INTEGRATION_CHECKLIST.md +31 -0
  17. package/.agents/skills/pm-sdk/references/PROMPTS.md +13 -0
  18. package/.agents/skills/pm-sdk/references/SURFACE_MAP.md +82 -0
  19. package/.agents/skills/pm-user/SKILL.md +111 -0
  20. package/.agents/skills/pm-user/references/BACKLOG_SHAPING.md +105 -0
  21. package/.agents/skills/pm-user/references/PROMPTS.md +17 -0
  22. package/.agents/skills/pm-user/references/WORKFLOWS.md +35 -0
  23. package/.claude-plugin/marketplace.json +2 -2
  24. package/CHANGELOG.md +50 -4
  25. package/README.md +8 -5
  26. package/dist/cli/commander-usage.js +11 -7
  27. package/dist/cli/error-guidance.js +62 -8
  28. package/dist/cli/help-content.d.ts +2 -0
  29. package/dist/cli/help-content.js +53 -17
  30. package/dist/cli/help-json-payload.d.ts +8 -2
  31. package/dist/cli/help-json-payload.js +46 -12
  32. package/dist/cli/main.js +52 -74
  33. package/dist/cli/register-annotations.js +83 -60
  34. package/dist/cli/register-setup.js +98 -57
  35. package/dist/cli-bundle/bundle-manifest.json +151 -151
  36. package/dist/cli-bundle/chunks/{chunk-UKBCRPA2.js → chunk-BY2FQ2NI.js} +2 -2
  37. package/dist/cli-bundle/chunks/chunk-E73FDIWT.js +3 -0
  38. package/dist/cli-bundle/chunks/{chunk-WRHJ3MB6.js → chunk-FEVBFFCQ.js} +2 -2
  39. package/dist/cli-bundle/chunks/{chunk-KBFP3E4E.js → chunk-M7OXRQE3.js} +66 -44
  40. package/dist/cli-bundle/chunks/{chunk-S4U76VZF.js → chunk-NBCBFVZI.js} +2 -2
  41. package/dist/cli-bundle/chunks/{chunk-ZNRLJ54C.js → chunk-NTXZHRKA.js} +45 -45
  42. package/dist/cli-bundle/chunks/chunk-QE6WQXFO.js +3 -0
  43. package/dist/cli-bundle/chunks/chunk-TIQ6AMH2.js +13 -0
  44. package/dist/cli-bundle/chunks/chunk-X2RROGZE.js +2 -0
  45. package/dist/cli-bundle/chunks/{chunk-E2GCFJSU.js → chunk-XRVVYRRO.js} +33 -33
  46. package/dist/cli-bundle/chunks/chunk-XWEQGHHG.js +202 -0
  47. package/dist/cli-bundle/chunks/{register-list-query-EMCPMICY.js → register-list-query-J35ZPQQ5.js} +2 -2
  48. package/dist/cli-bundle/chunks/{register-mutation-OJ67ABCB.js → register-mutation-J6XJJOGU.js} +4 -4
  49. package/dist/cli-bundle/chunks/{register-operations-H2GLP7LT.js → register-operations-AE3JEMFT.js} +2 -2
  50. package/dist/cli-bundle/chunks/register-setup-OQERLLWE.js +2 -0
  51. package/dist/cli-bundle/focused-chunks/{chunk-72T6JGAE.js → chunk-4ZDRZYYJ.js} +43 -43
  52. package/dist/cli-bundle/focused-chunks/{chunk-OHIHZ7HS.js → chunk-6GCRSLPG.js} +2 -2
  53. package/dist/cli-bundle/focused-chunks/{chunk-UYBA57GY.js → chunk-AD6ULRAF.js} +2 -2
  54. package/dist/cli-bundle/focused-chunks/{chunk-FXDLT6FL.js → chunk-AHAM2HAU.js} +2 -2
  55. package/dist/cli-bundle/focused-chunks/{chunk-LV5N3LK5.js → chunk-FC2AXLB5.js} +2 -2
  56. package/dist/cli-bundle/focused-chunks/{chunk-IBHXMFE7.js → chunk-HC7ODMH3.js} +2 -2
  57. package/dist/cli-bundle/focused-chunks/{chunk-4K2II4TV.js → chunk-HVQ22RC4.js} +2 -2
  58. package/dist/cli-bundle/focused-chunks/{chunk-MMXUPDDJ.js → chunk-JZYPPMXF.js} +2 -2
  59. package/dist/cli-bundle/focused-chunks/chunk-LLNTHF5X.js +2 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-LYFWQMVC.js +2 -0
  61. package/dist/cli-bundle/focused-chunks/{chunk-A644DUFQ.js → chunk-MEASX544.js} +2 -2
  62. package/dist/cli-bundle/focused-chunks/{chunk-YO3ZF3FI.js → chunk-THEPQMLX.js} +2 -2
  63. package/dist/cli-bundle/focused-chunks/{chunk-57XY346D.js → chunk-XDPYBQCF.js} +9 -9
  64. package/dist/cli-bundle/focused-chunks/{chunk-TMJDFHVD.js → chunk-Y3JJXRVK.js} +2 -2
  65. package/dist/cli-bundle/focused-chunks/{chunk-66VGB23P.js → chunk-Y5A7SJJ7.js} +2 -2
  66. package/dist/cli-bundle/focused-chunks/chunk-YJLDHJOD.js +2 -0
  67. package/dist/cli-bundle/focused-chunks/{chunk-P2E6LDAE.js → chunk-YVVZ3LQ6.js} +3 -3
  68. package/dist/cli-bundle/focused-chunks/chunk-Z2USIBR2.js +5 -0
  69. package/dist/cli-bundle/main.js +15 -14
  70. package/dist/cli-bundle/sdk-authoring.js +1 -1
  71. package/dist/cli-bundle/sdk-contracts.js +2 -2
  72. package/dist/cli-bundle/sdk-core.js +31 -31
  73. package/dist/cli-bundle/sdk-governance.js +1 -1
  74. package/dist/cli-bundle/sdk-graph.js +1 -1
  75. package/dist/cli-bundle/sdk-merge.js +31 -31
  76. package/dist/cli-bundle/sdk-query.js +1 -1
  77. package/dist/cli-bundle/sdk-runtime.js +1 -1
  78. package/dist/cli-bundle/sdk-testing.js +1 -1
  79. package/dist/cli-bundle/sdk.js +32 -7
  80. package/dist/core/governance/issue-codes.d.ts +11 -2
  81. package/dist/core/governance/issue-codes.js +29 -10
  82. package/dist/core/item/item-format.js +3 -3
  83. package/dist/core/store/item-store.js +12 -5
  84. package/dist/mcp/server.js +123 -9
  85. package/dist/mcp/tool-definitions.d.ts +2 -0
  86. package/dist/mcp/tool-definitions.js +5 -5
  87. package/dist/sdk/agent/closed-domain-contracts.d.ts +1 -1
  88. package/dist/sdk/agent/closed-domain-contracts.js +24 -2
  89. package/dist/sdk/agent/command-recovery.js +3 -3
  90. package/dist/sdk/agent/task-transcript-contracts.d.ts +52 -0
  91. package/dist/sdk/agent/task-transcript-contracts.js +198 -0
  92. package/dist/sdk/agent-capability-contracts.js +6 -2
  93. package/dist/sdk/annotations.d.ts +5 -2
  94. package/dist/sdk/annotations.js +66 -36
  95. package/dist/sdk/cli-bootstrap.d.ts +2 -8
  96. package/dist/sdk/cli-bootstrap.js +7 -66
  97. package/dist/sdk/cli-contracts/bootstrap-command-scanner.d.ts +23 -0
  98. package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +80 -0
  99. package/dist/sdk/cli-contracts/command-aliases.js +15 -2
  100. package/dist/sdk/cli-contracts/enum-contracts.d.ts +4 -1
  101. package/dist/sdk/cli-contracts/enum-contracts.js +7 -2
  102. package/dist/sdk/cli-contracts/flag-contracts.js +12 -5
  103. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +5 -5
  104. package/dist/sdk/cli-contracts/grammar-contracts.d.ts +3 -3
  105. package/dist/sdk/cli-contracts/grammar-contracts.js +24 -17
  106. package/dist/sdk/cli-contracts/runtime-contracts.js +13 -11
  107. package/dist/sdk/cli-contracts/tool-parameter-tables.js +15 -2
  108. package/dist/sdk/cli-contracts/tool-schema.d.ts +1 -1
  109. package/dist/sdk/cli-contracts/tool-schema.js +32 -16
  110. package/dist/sdk/cli-contracts.d.ts +1 -1
  111. package/dist/sdk/cli-contracts.js +3 -3
  112. package/dist/sdk/cli-program.js +3 -2
  113. package/dist/sdk/comments.d.ts +4 -0
  114. package/dist/sdk/comments.js +2 -2
  115. package/dist/sdk/completion.js +47 -16
  116. package/dist/sdk/contracts.d.ts +1 -0
  117. package/dist/sdk/contracts.js +3 -2
  118. package/dist/sdk/extension/install-sources.d.ts +13 -0
  119. package/dist/sdk/extension/install-sources.js +62 -30
  120. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +26 -2
  121. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +38 -14
  122. package/dist/sdk/governance/upgrade.d.ts +2 -0
  123. package/dist/sdk/governance/upgrade.js +30 -8
  124. package/dist/sdk/governance/validate.js +8 -6
  125. package/dist/sdk/guide-topics.js +6 -6
  126. package/dist/sdk/index.d.ts +5 -2
  127. package/dist/sdk/index.js +6 -3
  128. package/dist/sdk/learnings.d.ts +4 -0
  129. package/dist/sdk/learnings.js +7 -4
  130. package/dist/sdk/lifecycle/close.js +4 -3
  131. package/dist/sdk/mcp/apps.d.ts +70 -0
  132. package/dist/sdk/mcp/apps.js +154 -0
  133. package/dist/sdk/mcp/skills.d.ts +127 -0
  134. package/dist/sdk/mcp/skills.js +390 -0
  135. package/dist/sdk/notes.d.ts +4 -0
  136. package/dist/sdk/notes.js +2 -2
  137. package/dist/sdk/read-output-contracts.js +16 -3
  138. package/dist/sdk/runtime-action-aliases.js +7 -3
  139. package/dist/sdk/runtime-input.js +15 -4
  140. package/dist/sdk/runtime-primitives.d.ts +1 -1
  141. package/dist/sdk/runtime-primitives.js +3 -3
  142. package/dist/sdk/runtime.d.ts +6 -6
  143. package/dist/sdk/runtime.js +8 -8
  144. package/docs/CLI_GRAMMAR.md +7 -1
  145. package/docs/COMMANDS.md +5 -4
  146. package/docs/EXTENSIONS.md +33 -32
  147. package/docs/MCP_2026_07_28.md +24 -2
  148. package/docs/MCP_2026_07_28_CONFORMANCE.md +4 -4
  149. package/docs/MCP_SKILLS_AND_APPS.md +107 -0
  150. package/docs/OUTPUT_TOKEN_ACCOUNTING.md +20 -7
  151. package/docs/QUICKSTART.md +15 -15
  152. package/docs/README.md +1 -0
  153. package/docs/RELEASING.md +20 -4
  154. package/docs/SDK.md +12 -0
  155. package/docs/SDK_CONTEXT_INTEGRITY.md +18 -1
  156. package/docs/SDK_EVIDENCE_TRACEABILITY.md +9 -1
  157. package/docs/SDK_RUNTIME_BOUNDARIES.md +10 -0
  158. package/docs/TESTING.md +6 -2
  159. package/docs/agent-task-token-baseline.json +97 -11
  160. package/docs/agent-task-transcripts.json +211 -0
  161. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
  162. package/docs/generated/FLAG_LEXICON_BUDGETS.md +3 -3
  163. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -7
  164. package/docs/performance/cli-transport-overhead.md +10 -2
  165. package/marketplace.json +2 -2
  166. package/package.json +10 -8
  167. package/packages/pm-beads/README.md +12 -6
  168. package/packages/pm-beads/docs/MIGRATION.md +53 -0
  169. package/packages/pm-beads/extensions/beads/index.ts +8 -0
  170. package/packages/pm-beads/extensions/beads/runtime.ts +671 -112
  171. package/packages/pm-beads/package.json +1 -1
  172. package/packages/pm-calendar/package.json +1 -1
  173. package/packages/pm-command-kit/package.json +1 -1
  174. package/packages/pm-digital-twin/package.json +1 -1
  175. package/packages/pm-governance-audit/package.json +1 -1
  176. package/packages/pm-guide-shell/package.json +1 -1
  177. package/packages/pm-kanban/package.json +1 -1
  178. package/packages/pm-lifecycle-hooks/package.json +1 -1
  179. package/packages/pm-linked-test-adapters/package.json +1 -1
  180. package/packages/pm-search-advanced/package.json +1 -1
  181. package/packages/pm-templates/package.json +1 -1
  182. package/packages/pm-todos/package.json +1 -1
  183. package/packages/pm-vcs/package.json +1 -1
  184. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  185. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  186. package/sdk/public-surface.json +430 -36
  187. package/dist/cli-bundle/chunks/chunk-ES25LX3D.js +0 -202
  188. package/dist/cli-bundle/chunks/chunk-FRDWWB6R.js +0 -3
  189. package/dist/cli-bundle/chunks/chunk-ICQ3RVIY.js +0 -2
  190. package/dist/cli-bundle/chunks/chunk-IV64RJVE.js +0 -13
  191. package/dist/cli-bundle/chunks/chunk-MVYLQ67M.js +0 -3
  192. package/dist/cli-bundle/chunks/register-setup-GLZAHLVI.js +0 -2
  193. package/dist/cli-bundle/focused-chunks/chunk-4XNH2HM7.js +0 -2
  194. package/dist/cli-bundle/focused-chunks/chunk-7I23XGWO.js +0 -2
  195. package/dist/cli-bundle/focused-chunks/chunk-7YCDTCBC.js +0 -2
  196. package/dist/cli-bundle/focused-chunks/chunk-LMKG3DFE.js +0 -5
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c008aee5-ffe9-5da2-b1d9-6fb9fb6684c5")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="167b98d4-a5b5-581d-ac0a-17e8e3bfc490")}catch(e){}}();
3
3
  export { EXECUTABLE_COMMAND_ALIASES, PM_COMMAND_ALIAS_CONTRACTS, renderPmCommandAliasMigrationHint, resolvePmCommandAlias, } from "./cli-contracts/command-aliases.js";
4
4
  export { ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS, CALENDAR_COMMANDER_STRING_OPTION_CONTRACTS, CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS, LIST_COMMANDER_STRING_OPTION_CONTRACTS, NEXT_COMMANDER_STRING_OPTION_CONTRACTS, SEARCH_COMMANDER_STRING_OPTION_CONTRACTS, readFirstValueFromCommanderOptions, readFirstStringFromCommanderOptions, readStringArrayFromCommanderOptions, } from "./cli-contracts/commander-types.js";
5
5
  export { CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS, CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS, CREATE_COMMANDER_STRING_OPTION_CONTRACTS, UPDATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS, UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS, UPDATE_COMMANDER_STRING_OPTION_CONTRACTS, } from "./cli-contracts/commander-mutation-options.js";
@@ -7,7 +7,7 @@ export { CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS, CREATE_COMMANDER_REPEAT
7
7
  // tables live in sibling modules and are re-exported here so existing import
8
8
  // sites (sdk/index.ts, mcp/server.ts, commands/contracts.ts, completion.ts, …)
9
9
  // keep importing everything from "./cli-contracts.js" unchanged.
10
- export { MERGE_SUBCOMMAND_VALUES, PM_EXTENSION_CAPABILITY_CONTRACTS, PM_EXTENSION_SERVICE_NAME_CONTRACTS, PM_EXTENSION_POLICY_MODE_CONTRACTS, PM_EXTENSION_TRUST_MODE_CONTRACTS, PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS, PM_EXTENSION_POLICY_SURFACE_CONTRACTS, PM_CORE_COMMAND_NAMES, PM_CLI_ONLY_TOOL_ACTION_WAIVERS, PM_EXTENSION_PACKAGE_ACTION_SUBCOMMANDS, PM_ITEM_ACTION_SUBCOMMANDS, PM_DEPRECATED_TOOL_ACTIONS, PM_DISCOVERABLE_TOOL_ACTIONS, PM_TOOL_ACTIONS, analyzePmToolActionParity, isPmToolAction, isPmExtensionCapabilityContract, isPmExtensionServiceNameContract, isPmExtensionPolicyModeContract, isPmExtensionPolicySurfaceContract, } from "./cli-contracts/enum-contracts.js";
10
+ export { MERGE_SUBCOMMAND_VALUES, PM_EXTENSION_CAPABILITY_CONTRACTS, PM_EXTENSION_SERVICE_NAME_CONTRACTS, PM_EXTENSION_POLICY_MODE_CONTRACTS, PM_EXTENSION_TRUST_MODE_CONTRACTS, PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS, PM_EXTENSION_POLICY_SURFACE_CONTRACTS, PM_CORE_COMMAND_NAMES, PM_CLI_ONLY_TOOL_ACTION_WAIVERS, PM_EXTENSION_PACKAGE_ACTION_SUBCOMMANDS, PM_PACKAGE_ONLY_ACTION_SUBCOMMANDS, PM_ITEM_ACTION_SUBCOMMANDS, PM_DEPRECATED_TOOL_ACTIONS, PM_DISCOVERABLE_TOOL_ACTIONS, PM_TOOL_ACTIONS, analyzePmToolActionParity, isPmToolAction, isPmExtensionCapabilityContract, isPmExtensionServiceNameContract, isPmExtensionPolicyModeContract, isPmExtensionPolicySurfaceContract, } from "./cli-contracts/enum-contracts.js";
11
11
  export { TOOL_LIST_FILTER_OPTION_CONTRACTS, TOOL_AGGREGATE_OPTION_CONTRACTS, TOOL_SEARCH_FILTER_OPTION_CONTRACTS, TOOL_SHARED_CREATE_UPDATE_OPTION_CONTRACTS, TOOL_CREATE_OPTION_CONTRACTS, TOOL_UPDATE_OPTION_CONTRACTS, TOOL_UPDATE_MANY_FILTER_OPTION_CONTRACTS, TOOL_CLOSE_MANY_FILTER_OPTION_CONTRACTS, TOOL_CALENDAR_OPTION_CONTRACTS, TOOL_ACTIVITY_OPTION_CONTRACTS, TOOL_CONTEXT_OPTION_CONTRACTS, TOOL_DEPS_OPTION_CONTRACTS, TOOL_GRAPH_OPTION_CONTRACTS, TOOL_BULK_MUTATION_FILTER_OPTION_CONTRACT_SOURCE, TOOL_CREATE_OPTION_CONTRACT_SOURCE, TOOL_SHARED_CREATE_UPDATE_OPTION_CONTRACT_SOURCE, TOOL_UPDATE_OPTION_CONTRACT_SOURCE, verifyToolOptionCliParity, } from "./cli-contracts/tool-option-contracts.js";
12
12
  export { PM_COMMAND_POSITIONAL_CONTRACTS, PM_POSITIONAL_ACTION_CONTRACTS, } from "./cli-contracts/grammar-contracts.js";
13
13
  export { withFlagAliasMetadata, compactFlagAliasContracts, resolvePmPositionalActionFlagContracts, SUBCOMMAND_GLOBAL_FLAG_CONTRACTS, GLOBAL_FLAG_CONTRACTS, LIST_FILTER_FLAG_CONTRACTS, AGGREGATE_FLAG_CONTRACTS, COMMENTS_FLAG_CONTRACTS, NOTES_FLAG_CONTRACTS, LEARNINGS_FLAG_CONTRACTS, FILES_FLAG_CONTRACTS, DOCS_FLAG_CONTRACTS, HISTORY_FLAG_CONTRACTS, HISTORY_REDACT_FLAG_CONTRACTS, HISTORY_REPAIR_FLAG_CONTRACTS, HISTORY_AUTHOR_ACKNOWLEDGE_FLAG_CONTRACTS, HISTORY_COMPACT_FLAG_CONTRACTS, MERGE_FLAG_CONTRACTS, SCHEMA_FLAG_CONTRACTS, PROFILE_FLAG_CONTRACTS, PLAN_FLAG_CONTRACTS, INIT_FLAG_CONTRACTS, CONFIG_FLAG_CONTRACTS, EXTENSION_FLAG_CONTRACTS, EXTENSION_SCOPE_FLAG_CONTRACTS, EXTENSION_INIT_FLAG_CONTRACTS, EXTENSION_MIGRATE_FLAG_CONTRACTS, PACKAGE_FLAG_CONTRACTS, PACKAGE_INIT_FLAG_CONTRACTS, EXTENSION_INSTALL_FLAG_CONTRACTS, EXTENSION_UNINSTALL_FLAG_CONTRACTS, EXTENSION_EXPLORE_FLAG_CONTRACTS, EXTENSION_DESCRIBE_FLAG_CONTRACTS, EXTENSION_ADOPT_ALL_FLAG_CONTRACTS, EXTENSION_ACTIVATE_FLAG_CONTRACTS, EXTENSION_DEACTIVATE_FLAG_CONTRACTS, EXTENSION_MANAGE_FLAG_CONTRACTS, EXTENSION_RELOAD_FLAG_CONTRACTS, EXTENSION_DOCTOR_FLAG_CONTRACTS, EXTENSION_CATALOG_FLAG_CONTRACTS, EXTENSION_ADOPT_FLAG_CONTRACTS, INSTALL_FLAG_CONTRACTS, UPGRADE_FLAG_CONTRACTS, REINDEX_FLAG_CONTRACTS, CLOSE_FLAG_CONTRACTS, CLOSE_MANY_FLAG_CONTRACTS, APPEND_FLAG_CONTRACTS, CLAIM_FLAG_CONTRACTS, RESTORE_FLAG_CONTRACTS, DELETE_FLAG_CONTRACTS, RELEASE_FLAG_CONTRACTS, START_TASK_FLAG_CONTRACTS, PAUSE_TASK_FLAG_CONTRACTS, CLOSE_TASK_FLAG_CONTRACTS, MEET_FLAG_CONTRACTS, EVENT_FLAG_CONTRACTS, EVENTS_FLAG_CONTRACTS, REMIND_FLAG_CONTRACTS, TEST_FLAG_CONTRACTS, TEST_ALL_FLAG_CONTRACTS, TELEMETRY_FLAG_CONTRACTS, TEST_RUNS_FLAG_CONTRACTS, GC_FLAG_CONTRACTS, STATS_FLAG_CONTRACTS, DUPLICATES_FLAG_CONTRACTS, HEALTH_FLAG_CONTRACTS, VALIDATE_FLAG_CONTRACTS, ASSURANCE_FLAG_CONTRACTS, CREATE_FLAG_CONTRACTS, ITEM_COMPLETE_FLAG_CONTRACTS, ITEM_REOPEN_FLAG_CONTRACTS, ITEM_MUTATE_FLAG_CONTRACTS, COPY_FLAG_CONTRACTS, FOCUS_FLAG_CONTRACTS, UPDATE_FLAG_CONTRACTS, UPDATE_MANY_FLAG_CONTRACTS, CALENDAR_FLAG_CONTRACTS, ACTIVITY_FLAG_CONTRACTS, CONTEXT_FLAG_CONTRACTS, GET_FLAG_CONTRACTS, GUIDE_FLAG_CONTRACTS, DEPS_FLAG_CONTRACTS, GRAPH_FLAG_CONTRACTS, EVAL_FLAG_CONTRACTS, WORKSPACE_FLAG_CONTRACTS, NEXT_FLAG_CONTRACTS, SEARCH_FLAG_CONTRACTS, CONTRACTS_FLAG_CONTRACTS, COMPLETION_FLAG_CONTRACTS, hasSubcommandFlagContractsForCommand, resolveSubcommandFlagContractsForCommand, toCompletionFlagString, } from "./cli-contracts/flag-contracts.js";
@@ -15,4 +15,4 @@ export { buildPmActionToolInputSchema, PM_TOOL_RESERVED_CUSTOM_FIELD_PROPERTIES,
15
15
  export { analyzeSdkCliParameterCompleteness, } from "./cli-contracts/completeness.js";
16
16
  export { PM_COMMAND_OUTPUT_BUDGET_CONTRACTS, PM_DIAGNOSTIC_DEGRADATION_STEPS, PM_DIAGNOSTIC_OUTPUT_BUDGET_CONTRACTS, PM_DIAGNOSTIC_OUTPUT_CLASSES, PM_OUTPUT_BUDGET_CLASSES, PM_OUTPUT_DEGRADATION_STEPS, createPmCommandOutputBudget, definePmCommandOutputBudget, estimatePmOutputTokens, inferPmOutputBudgetClass, projectPmDiagnosticOutput, projectPmDiagnosticText, resolvePmDiagnosticOutputBudget, resolvePmCommandOutputBudget, } from "./cli-contracts/agent-output-contracts.js";
17
17
  //# sourceMappingURL=cli-contracts.js.map
18
- //# debugId=c008aee5-ffe9-5da2-b1d9-6fb9fb6684c5
18
+ //# debugId=167b98d4-a5b5-581d-ac0a-17e8e3bfc490
@@ -4,7 +4,7 @@
4
4
  * Builds the reusable Commander root that embeds pm's universal global contracts.
5
5
  */
6
6
 
7
- !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]="03d46cbf-73bc-50c9-b4e6-e7329ee53076")}catch(e){}}();
7
+ !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]="31e820a7-aa60-5e37-846d-c62b81b47587")}catch(e){}}();
8
8
  import { Command } from "commander";
9
9
  import { writeStdout } from "../core/output/output.js";
10
10
  /** Create a fresh pm root program suitable for one-shot CLI or embedded hosts. */
@@ -41,9 +41,10 @@ export function createPmCliProgram(version) {
41
41
  .option("--no-extensions", "Disable extension loading")
42
42
  .option("--no-pager", "Disable pager integration for help and long output")
43
43
  .option("--explain", "Render extended rationale and examples in help output")
44
+ .option("--all", "Reveal every public command and compatibility alias")
44
45
  .option("--profile", "Print deterministic timing diagnostics")
45
46
  .option("--author <id>", "Override mutation author for this invocation")
46
47
  .exitOverride();
47
48
  }
48
49
  //# sourceMappingURL=cli-program.js.map
49
- //# debugId=03d46cbf-73bc-50c9-b4e6-e7329ee53076
50
+ //# debugId=31e820a7-aa60-5e37-846d-c62b81b47587
@@ -19,6 +19,8 @@ export interface CommentsCommandOptions {
19
19
  includeMeta?: boolean;
20
20
  /** Return complete comment history after a mutation instead of a bounded receipt. */
21
21
  fullHistory?: boolean;
22
+ /** Append only when no comment has the same resolved author and text. */
23
+ ifAbsent?: boolean;
22
24
  /** Value that configures or reports author for this contract. */
23
25
  author?: string;
24
26
  /** Human-readable explanation suitable for logs and agent-facing output. */
@@ -46,6 +48,8 @@ export interface CommentsResult {
46
48
  mutation_receipt?: AnnotationMutationReceipt;
47
49
  /** Declares whether older comments were withheld from a mutation response. */
48
50
  omission_receipt?: AnnotationOmissionReceipt;
51
+ /** Whether a requested mutation changed persisted state. */
52
+ changed?: boolean;
49
53
  }
50
54
  /** Implements run comments for the public runtime surface of this module. */
51
55
  export declare function runComments(id: string, options: CommentsCommandOptions, global: GlobalOptions): Promise<CommentsResult>;
@@ -4,7 +4,7 @@
4
4
  * Implements the pm comments command surface and its agent-facing runtime behavior.
5
5
  */
6
6
 
7
- !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]="5167b367-26cf-52d5-8040-bb001ce3592a")}catch(e){}}();
7
+ !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]="f761d37b-28df-5176-9e25-762f57aa0abf")}catch(e){}}();
8
8
  import { isFileAbsentError } from "../core/fs/fs-utils.js";
9
9
  import { readFile } from "node:fs/promises";
10
10
  import { EXIT_CODE, PmCliError, createStdinTokenResolver, shouldResolveMutationStdinTokens, } from "./runtime-primitives.js";
@@ -131,4 +131,4 @@ export async function runComments(id, options, global) {
131
131
  });
132
132
  }
133
133
  //# sourceMappingURL=comments.js.map
134
- //# debugId=5167b367-26cf-52d5-8040-bb001ce3592a
134
+ //# debugId=f761d37b-28df-5176-9e25-762f57aa0abf
@@ -4,11 +4,11 @@
4
4
  * Implements the pm completion command surface and its agent-facing runtime behavior.
5
5
  */
6
6
 
7
- !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]="48da3e98-ab96-54de-8993-7de0c4edf19b")}catch(e){}}();
7
+ !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]="4bf2b42b-91f3-5850-b1f1-d8a01525860c")}catch(e){}}();
8
8
  import { EXIT_CODE, PmCliError } from "./runtime-primitives.js";
9
9
  import { listPmCommandsForTier } from "./agent-capability-contracts.js";
10
10
  import { SCAFFOLD_CAPABILITIES } from "./extension/scaffold.js";
11
- import { AGGREGATE_FLAG_CONTRACTS, ACTIVITY_FLAG_CONTRACTS, APPEND_FLAG_CONTRACTS, CALENDAR_FLAG_CONTRACTS, CLOSE_MANY_FLAG_CONTRACTS, COMPLETION_FLAG_CONTRACTS, CONTRACTS_FLAG_CONTRACTS, CONTEXT_FLAG_CONTRACTS, COPY_FLAG_CONTRACTS, FOCUS_FLAG_CONTRACTS, MEET_FLAG_CONTRACTS, REMIND_FLAG_CONTRACTS, CREATE_FLAG_CONTRACTS, DEPS_FLAG_CONTRACTS, DUPLICATES_FLAG_CONTRACTS, EXTENSION_FLAG_CONTRACTS, GRAPH_FLAG_CONTRACTS, GET_FLAG_CONTRACTS, GUIDE_FLAG_CONTRACTS, GLOBAL_FLAG_CONTRACTS, HEALTH_FLAG_CONTRACTS, HISTORY_AUTHOR_ACKNOWLEDGE_FLAG_CONTRACTS, HISTORY_FLAG_CONTRACTS, INIT_FLAG_CONTRACTS, LIST_FILTER_FLAG_CONTRACTS, NEXT_FLAG_CONTRACTS, PM_COMMAND_ALIAS_CONTRACTS, PACKAGE_FLAG_CONTRACTS, PLAN_FLAG_CONTRACTS, SEARCH_FLAG_CONTRACTS, STATS_FLAG_CONTRACTS, EVENTS_FLAG_CONTRACTS, UPDATE_FLAG_CONTRACTS, UPDATE_MANY_FLAG_CONTRACTS, toCompletionFlagString, } from "./cli-contracts.js";
11
+ import { AGGREGATE_FLAG_CONTRACTS, ACTIVITY_FLAG_CONTRACTS, APPEND_FLAG_CONTRACTS, CALENDAR_FLAG_CONTRACTS, CLOSE_MANY_FLAG_CONTRACTS, COMPLETION_FLAG_CONTRACTS, CONTRACTS_FLAG_CONTRACTS, CONTEXT_FLAG_CONTRACTS, COPY_FLAG_CONTRACTS, FOCUS_FLAG_CONTRACTS, MEET_FLAG_CONTRACTS, REMIND_FLAG_CONTRACTS, CREATE_FLAG_CONTRACTS, DEPS_FLAG_CONTRACTS, DUPLICATES_FLAG_CONTRACTS, EXTENSION_FLAG_CONTRACTS, GRAPH_FLAG_CONTRACTS, GET_FLAG_CONTRACTS, GUIDE_FLAG_CONTRACTS, GLOBAL_FLAG_CONTRACTS, HEALTH_FLAG_CONTRACTS, HISTORY_AUTHOR_ACKNOWLEDGE_FLAG_CONTRACTS, HISTORY_FLAG_CONTRACTS, INIT_FLAG_CONTRACTS, LIST_FILTER_FLAG_CONTRACTS, NEXT_FLAG_CONTRACTS, PM_COMMAND_ALIAS_CONTRACTS, PACKAGE_FLAG_CONTRACTS, PLAN_FLAG_CONTRACTS, SEARCH_FLAG_CONTRACTS, STATS_FLAG_CONTRACTS, EVENTS_FLAG_CONTRACTS, UPDATE_FLAG_CONTRACTS, UPDATE_MANY_FLAG_CONTRACTS, UPGRADE_FLAG_CONTRACTS, toCompletionFlagString, } from "./cli-contracts.js";
12
12
  import { BUILTIN_ITEM_TYPE_VALUES, STATUS_VALUES } from "../types/index.js";
13
13
  import { listGuideTopicIds } from "./guide-topics.js";
14
14
  const VALID_SHELLS = ["bash", "zsh", "fish"];
@@ -49,9 +49,11 @@ const PLAN_SUBCOMMANDS_LIST = "create show add-step update-step complete-step bl
49
49
  const COMPLETION_FLAGS = toCompletionFlagString(COMPLETION_FLAG_CONTRACTS);
50
50
  const COMPLETION_SHELL_CHOICES = `${COMPLETION_FLAGS} bash zsh fish`;
51
51
  const GUIDE_TOPIC_CHOICES = joinCompletionValues(listGuideTopicIds());
52
- const LIFECYCLE_ACTIONS = "init scaffold install uninstall explore manage describe reload doctor catalog adopt adopt-all activate deactivate";
52
+ const EXTENSION_LIFECYCLE_ACTIONS = "init scaffold install uninstall explore manage describe reload doctor catalog adopt adopt-all activate deactivate migrate";
53
+ const PACKAGE_LIFECYCLE_ACTIONS = `${EXTENSION_LIFECYCLE_ACTIONS} upgrade`;
53
54
  const EXTENSION_LIFECYCLE_FLAGS = toCompletionFlagString(EXTENSION_FLAG_CONTRACTS);
54
55
  const PACKAGE_LIFECYCLE_FLAGS = toCompletionFlagString(PACKAGE_FLAG_CONTRACTS);
56
+ const UPGRADE_FLAGS = toCompletionFlagString(UPGRADE_FLAG_CONTRACTS);
55
57
  const MUTATION_FLAGS = "--author --message --force --json --quiet --no-changed-fields --id-only --pm-path --path --no-extensions --no-pager --profile --help";
56
58
  const DELETE_MUTATION_FLAGS = "--dry-run --author --message --force --json --quiet --no-changed-fields --id-only --pm-path --path --no-extensions --no-pager --profile --help";
57
59
  const CLOSE_MUTATION_FLAGS = "--author --message --validate-close --duplicate-of --force --json --quiet --no-changed-fields --id-only --pm-path --path --no-extensions --no-pager --profile --help";
@@ -59,7 +61,6 @@ const RELEASE_MUTATION_FLAGS = "--author --message --force --json --quiet --no-c
59
61
  const COMMAND_COMPLETION_DESCRIPTIONS = [
60
62
  ["init", "Initialize pm storage for the current workspace"],
61
63
  ["config", "Read or update pm settings"],
62
- ["extension", "Manage extension lifecycle operations"],
63
64
  ["package", "Manage package lifecycle operations"],
64
65
  ["packages", "Alias for package"],
65
66
  ["create", "Create a new project management item"],
@@ -515,13 +516,13 @@ export function generateBashScript(itemTypes = [], tags = [], eagerTagExpansion
515
516
  "",
516
517
  ...(useEagerTagExpansion
517
518
  ? [
518
- ' if [[ "$prev" == "--tag" || "$prev" == "--tags" ]]; then',
519
+ ' if [[ ( "$prev" == "--tag" || "$prev" == "--tags" ) && ! ( ( "${COMP_WORDS[1]}" == "package" || "${COMP_WORDS[1]}" == "packages" ) && "${COMP_WORDS[2]}" == "upgrade" ) ]]; then',
519
520
  ` COMPREPLY=(${compgen(tagValues)})`,
520
521
  " return 0",
521
522
  " fi",
522
523
  ]
523
524
  : [
524
- ' if [[ "$prev" == "--tag" || "$prev" == "--tags" ]]; then',
525
+ ' if [[ ( "$prev" == "--tag" || "$prev" == "--tags" ) && ! ( ( "${COMP_WORDS[1]}" == "package" || "${COMP_WORDS[1]}" == "packages" ) && "${COMP_WORDS[2]}" == "upgrade" ) ]]; then',
525
526
  " local now ttl cache_ts tag_values",
526
527
  ' now="$(date +%s 2>/dev/null || echo 0)"',
527
528
  ' ttl="${PM_COMPLETION_TAG_TTL:-120}"',
@@ -537,6 +538,11 @@ export function generateBashScript(itemTypes = [], tags = [], eagerTagExpansion
537
538
  " fi",
538
539
  ]),
539
540
  "",
541
+ ' if [[ "$prev" == "--tag" && ( ( "${COMP_WORDS[1]}" == "package" || "${COMP_WORDS[1]}" == "packages" ) && "${COMP_WORDS[2]}" == "upgrade" ) ]]; then',
542
+ " COMPREPLY=()",
543
+ " return 0",
544
+ " fi",
545
+ "",
540
546
  ' local cmd="${COMP_WORDS[1]}"',
541
547
  "",
542
548
  ' case "$cmd" in',
@@ -589,19 +595,19 @@ export function generateBashScript(itemTypes = [], tags = [], eagerTagExpansion
589
595
  ` COMPREPLY=(${compgen("--criterion --clear-criteria --format --policy --json --quiet --no-changed-fields --pm-path --path --no-extensions --no-pager --profile --help")})`,
590
596
  " ;;",
591
597
  " extension)",
592
- ` COMPREPLY=(${compgen(`${LIFECYCLE_ACTIONS} ${EXTENSION_LIFECYCLE_FLAGS}`)})`,
598
+ ` COMPREPLY=(${compgen(`${EXTENSION_LIFECYCLE_ACTIONS} ${EXTENSION_LIFECYCLE_FLAGS}`)})`,
593
599
  " ;;",
594
600
  " package|packages)",
595
- ` COMPREPLY=(${compgen(`${LIFECYCLE_ACTIONS} ${PACKAGE_LIFECYCLE_FLAGS}`)})`,
601
+ ` COMPREPLY=(${compgen(`${PACKAGE_LIFECYCLE_ACTIONS} ${PACKAGE_LIFECYCLE_FLAGS} ${UPGRADE_FLAGS}`)})`,
596
602
  " ;;",
597
603
  " comments)",
598
- ` COMPREPLY=(${compgen("--add --body --stdin --file --edit --delete --limit --full-history --author --message --force --json --quiet --no-changed-fields --pm-path --path --no-extensions --no-pager --profile --help")})`,
604
+ ` COMPREPLY=(${compgen("--add --body --stdin --file --edit --delete --limit --full-history --if-absent --author --message --force --json --quiet --no-changed-fields --pm-path --path --no-extensions --no-pager --profile --help")})`,
599
605
  " ;;",
600
606
  " notes)",
601
- ` COMPREPLY=(${compgen("--add --add-json --stdin --file --edit --delete --limit --since --event-type --include-meta --full-history --author --message --force --json --quiet --no-changed-fields --pm-path --path --no-extensions --no-pager --profile --help")})`,
607
+ ` COMPREPLY=(${compgen("--add --add-json --stdin --file --edit --delete --limit --since --event-type --include-meta --full-history --if-absent --author --message --force --json --quiet --no-changed-fields --pm-path --path --no-extensions --no-pager --profile --help")})`,
602
608
  " ;;",
603
609
  " learnings)",
604
- ` COMPREPLY=(${compgen("--add --stdin --file --edit --delete --limit --full-history --author --message --force --json --quiet --no-changed-fields --pm-path --path --no-extensions --no-pager --profile --help")})`,
610
+ ` COMPREPLY=(${compgen("--add --stdin --file --edit --delete --limit --full-history --if-absent --author --message --force --json --quiet --no-changed-fields --pm-path --path --no-extensions --no-pager --profile --help")})`,
605
611
  " ;;",
606
612
  " files)",
607
613
  ` COMPREPLY=(${compgen("discover lookup --add --add-glob --remove --migrate --list --apply --note --append-stable --validate-paths --scope --limit --offset --no-truncate --strict-read --explain --lines --decision-depth --author --message --force --json --quiet --no-changed-fields --pm-path --path --no-extensions --no-pager --profile --help")})`,
@@ -706,6 +712,9 @@ export function generateBashScript(itemTypes = [], tags = [], eagerTagExpansion
706
712
  ` COMPREPLY=(${compgen(GLOBAL_FLAGS)})`,
707
713
  " ;;",
708
714
  " esac",
715
+ ' if [[ "$cmd" == "comments" || "$cmd" == "notes" || "$cmd" == "learnings" ]]; then',
716
+ ` COMPREPLY+=(${compgen("--text")})`,
717
+ " fi",
709
718
  " return 0",
710
719
  "}",
711
720
  "",
@@ -778,6 +787,7 @@ _pm() {
778
787
  local context state line
779
788
  _arguments -C \\
780
789
  '--json[Output JSON instead of TOON]' \\
790
+ '--all[Reveal every public command and compatibility alias]' \\
781
791
  '--quiet[Suppress stdout output]' \\
782
792
  '--output-include[Retain comma-separated read fields or sections]:selectors' \\
783
793
  '--output-limit[Set the universal read row ceiling]:limit' \\
@@ -1353,12 +1363,14 @@ ${zshSearchRuntimeFieldFlags} '--json[Output JSON]' \\
1353
1363
  comments)
1354
1364
  _arguments \\
1355
1365
  '--add[Add one entry (plain text, text=<value>, markdown pairs, or - for stdin)]:text' \\
1366
+ '--text[Alias for --add]:text' \\
1356
1367
  '--stdin[Read comment text from stdin (supports multiline markdown)]' \\
1357
1368
  '--file[Read comment text from file (supports multiline markdown)]:path' \\
1358
1369
  '--edit[Replace the comment at 1-based index (text from positional/--add/--stdin/--file)]:index' \\
1359
1370
  '--delete[Delete the comment at 1-based index]:index' \\
1360
1371
  '--limit[Return only latest n entries]:number' \\
1361
1372
  '--full-history[Return complete post-mutation history]' \\
1373
+ '--if-absent[Append only when the resolved author and text are absent]' \\
1362
1374
  '--author[Entry author (falls back to PM_AUTHOR/settings)]:author' \\
1363
1375
  '--message[History message]:message' \\
1364
1376
  '--force[Force override]' \\
@@ -1368,6 +1380,7 @@ ${zshSearchRuntimeFieldFlags} '--json[Output JSON]' \\
1368
1380
  notes)
1369
1381
  _arguments \\
1370
1382
  '--add[Add one entry (plain text, text=<value>, markdown pairs, or - for stdin)]:text' \\
1383
+ '--text[Alias for --add]:text' \\
1371
1384
  '--add-json[Append one validated JSON context event]:json' \\
1372
1385
  '--stdin[Read entry text from stdin]' \\
1373
1386
  '--file[Read entry text from file]:path' \\
@@ -1378,6 +1391,7 @@ ${zshSearchRuntimeFieldFlags} '--json[Output JSON]' \\
1378
1391
  '--event-type[Return structured events with this top-level type]:event_type' \\
1379
1392
  '--include-meta[Include result counts and truncation metadata]' \\
1380
1393
  '--full-history[Return complete post-mutation history]' \\
1394
+ '--if-absent[Append only when the resolved author and text are absent]' \\
1381
1395
  '--author[Entry author (falls back to PM_AUTHOR/settings)]:author' \\
1382
1396
  '--message[History message]:message' \\
1383
1397
  '--force[Force override]' \\
@@ -1387,12 +1401,14 @@ ${zshSearchRuntimeFieldFlags} '--json[Output JSON]' \\
1387
1401
  learnings)
1388
1402
  _arguments \\
1389
1403
  '--add[Add one entry (plain text, text=<value>, markdown pairs, or - for stdin)]:text' \\
1404
+ '--text[Alias for --add]:text' \\
1390
1405
  '--stdin[Read entry text from stdin]' \\
1391
1406
  '--file[Read entry text from file]:path' \\
1392
1407
  '--edit[Replace the entry at a 1-based index]:index' \\
1393
1408
  '--delete[Delete the entry at a 1-based index]:index' \\
1394
1409
  '--limit[Return only latest n entries]:number' \\
1395
1410
  '--full-history[Return complete post-mutation history]' \\
1411
+ '--if-absent[Append only when the resolved author and text are absent]' \\
1396
1412
  '--author[Entry author (falls back to PM_AUTHOR/settings)]:author' \\
1397
1413
  '--message[History message]:message' \\
1398
1414
  '--force[Force override]' \\
@@ -1665,7 +1681,7 @@ ${zshSearchRuntimeFieldFlags} '--json[Output JSON]' \\
1665
1681
  ;;
1666
1682
  extension)
1667
1683
  _arguments \\
1668
- '1:extension_action:(init scaffold install uninstall explore manage describe reload doctor catalog adopt adopt-all activate deactivate)' \\
1684
+ '1:extension_action:(${EXTENSION_LIFECYCLE_ACTIONS})' \\
1669
1685
  '--init[Generate a starter extension scaffold at target path]' \\
1670
1686
  '--scaffold[Alias for --init]' \\
1671
1687
  '--capability[Capability the init scaffold targets]:capability:(${SCAFFOLD_CAPABILITIES.join(" ")})' \\
@@ -1704,7 +1720,7 @@ ${zshSearchRuntimeFieldFlags} '--json[Output JSON]' \\
1704
1720
  ;;
1705
1721
  package|packages)
1706
1722
  _arguments \\
1707
- '1:package_action:(init scaffold install uninstall explore manage describe reload doctor catalog adopt adopt-all activate deactivate)' \\
1723
+ '1:package_action:(${PACKAGE_LIFECYCLE_ACTIONS})' \\
1708
1724
  '--init[Generate a starter package scaffold at target path]' \\
1709
1725
  '--scaffold[Alias for --init]' \\
1710
1726
  '--capability[Capability the init scaffold targets]:capability:(${SCAFFOLD_CAPABILITIES.join(" ")})' \\
@@ -1738,6 +1754,12 @@ ${zshSearchRuntimeFieldFlags} '--json[Output JSON]' \\
1738
1754
  '--ignore-global[Alias for --isolated]' \\
1739
1755
  '--strict-exit[Return non-zero exit when doctor warnings are present]' \\
1740
1756
  '--fail-on-warn[Alias for --strict-exit (doctor)]' \\
1757
+ '--dry-run[Plan upgrades without mutating]' \\
1758
+ '--cli-only[Upgrade only the pm CLI/SDK npm package]' \\
1759
+ '--packages-only[Upgrade only managed pm packages]' \\
1760
+ '--repair[Force npm global reinstall for the CLI/SDK]' \\
1761
+ '--tag[npm version or dist-tag for upgrades]:tag' \\
1762
+ '--package-name[Override the CLI package name]:package_name' \\
1741
1763
  '--json[Output JSON]' \\
1742
1764
  '--quiet[Suppress stdout]' \\
1743
1765
  '*:target_or_name:_files -/'
@@ -1818,6 +1840,7 @@ complete -c pm -f
1818
1840
 
1819
1841
  # Global flags (available for all subcommands)
1820
1842
  complete -c pm -l json -d 'Output JSON instead of TOON'
1843
+ complete -c pm -l all -d 'Reveal every public command and compatibility alias'
1821
1844
  complete -c pm -l quiet -d 'Suppress stdout output'
1822
1845
  complete -c pm -l output-include -d 'Retain comma-separated read fields or sections' -r
1823
1846
  complete -c pm -l output-limit -d 'Set the universal read row ceiling' -r
@@ -2423,6 +2446,7 @@ complete -c pm -n '__fish_seen_subcommand_from graph' -l summary -d 'Return coun
2423
2446
 
2424
2447
  # comments / notes / learnings flags
2425
2448
  complete -c pm -n '__fish_seen_subcommand_from comments notes learnings' -l add -d 'Add one entry (text=<value> or plain text)' -r
2449
+ complete -c pm -n '__fish_seen_subcommand_from comments notes learnings' -l text -d 'Alias for --add' -r
2426
2450
  complete -c pm -n '__fish_seen_subcommand_from notes' -l add-json -d 'Append one validated JSON context event' -r
2427
2451
  complete -c pm -n '__fish_seen_subcommand_from notes' -l since -d 'Return structured events at or after an ISO timestamp' -r
2428
2452
  complete -c pm -n '__fish_seen_subcommand_from notes' -l event-type -d 'Return structured events with this top-level type' -r
@@ -2431,6 +2455,7 @@ complete -c pm -n '__fish_seen_subcommand_from comments' -l stdin -d 'Read comme
2431
2455
  complete -c pm -n '__fish_seen_subcommand_from comments' -l file -d 'Read comment text from file (supports multiline markdown)' -r
2432
2456
  complete -c pm -n '__fish_seen_subcommand_from comments' -l edit -d 'Replace the comment at 1-based index (text from positional/--add/--stdin/--file)' -r
2433
2457
  complete -c pm -n '__fish_seen_subcommand_from comments' -l delete -d 'Delete the comment at 1-based index' -r
2458
+ complete -c pm -n '__fish_seen_subcommand_from comments notes learnings' -l if-absent -d 'Append only when the resolved author and text are absent'
2434
2459
  complete -c pm -n '__fish_seen_subcommand_from notes' -l stdin -d 'Read entry text from stdin'
2435
2460
  complete -c pm -n '__fish_seen_subcommand_from notes' -l file -d 'Read entry text from file' -r
2436
2461
  complete -c pm -n '__fish_seen_subcommand_from notes' -l edit -d 'Replace the entry at a 1-based index' -r
@@ -2666,7 +2691,7 @@ complete -c pm -n '__fish_seen_subcommand_from completion' -a 'bash zsh fish' -d
2666
2691
  complete -c pm -n '__fish_seen_subcommand_from templates' -a 'save list show' -d 'Templates command'
2667
2692
 
2668
2693
  # extension lifecycle flags
2669
- complete -c pm -n '__fish_seen_subcommand_from extension' -a '${LIFECYCLE_ACTIONS}' -d 'Extension action subcommand'
2694
+ complete -c pm -n '__fish_seen_subcommand_from extension' -a '${EXTENSION_LIFECYCLE_ACTIONS}' -d 'Extension action subcommand'
2670
2695
  complete -c pm -n '__fish_seen_subcommand_from extension' -l init -d 'Generate starter extension scaffold'
2671
2696
  complete -c pm -n '__fish_seen_subcommand_from extension' -l scaffold -d 'Alias for --init'
2672
2697
  complete -c pm -n '__fish_seen_subcommand_from extension' -l capability -d 'Capability the init scaffold targets' -r -a '${SCAFFOLD_CAPABILITIES.join(" ")}'
@@ -2702,7 +2727,7 @@ complete -c pm -n '__fish_seen_subcommand_from extension' -l fail-on-warn -d 'Al
2702
2727
 
2703
2728
  # package lifecycle flags
2704
2729
  for package_cmd in package packages
2705
- complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -a '${LIFECYCLE_ACTIONS}' -d 'Package action subcommand'
2730
+ complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -a '${PACKAGE_LIFECYCLE_ACTIONS}' -d 'Package action subcommand'
2706
2731
  complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l init -d 'Generate starter package scaffold'
2707
2732
  complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l scaffold -d 'Alias for --init'
2708
2733
  complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l capability -d 'Capability the init scaffold targets' -r -a '${SCAFFOLD_CAPABILITIES.join(" ")}'
@@ -2736,6 +2761,12 @@ for package_cmd in package packages
2736
2761
  complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l ignore-global -d 'Alias for --isolated'
2737
2762
  complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l strict-exit -d 'Return non-zero exit when doctor warnings are present'
2738
2763
  complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l fail-on-warn -d 'Alias for --strict-exit (doctor)'
2764
+ complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l dry-run -d 'Plan upgrades without mutating'
2765
+ complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l cli-only -d 'Upgrade only the pm CLI/SDK npm package'
2766
+ complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l packages-only -d 'Upgrade only managed pm packages'
2767
+ complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l repair -d 'Force npm global reinstall for the CLI/SDK'
2768
+ complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l tag -d 'npm version or dist-tag for upgrades' -r
2769
+ complete -c pm -n "__fish_seen_subcommand_from $package_cmd" -l package-name -d 'Override the CLI package name' -r
2739
2770
  end`;
2740
2771
  }
2741
2772
  const SETUP_HINTS = {
@@ -2767,4 +2798,4 @@ export function runCompletion(shell, itemTypes = [], tags = [], eagerTagExpansio
2767
2798
  };
2768
2799
  }
2769
2800
  //# sourceMappingURL=completion.js.map
2770
- //# debugId=48da3e98-ab96-54de-8993-7de0c4edf19b
2801
+ //# debugId=4bf2b42b-91f3-5850-b1f1-d8a01525860c
@@ -13,6 +13,7 @@ export * from "./flag-invocation-contracts.js";
13
13
  export * from "./cli-contracts/flag-lexicon-contracts.js";
14
14
  export * from "./output-token-accounting.js";
15
15
  export * from "./output-contracts.js";
16
+ export * from "./agent/task-transcript-contracts.js";
16
17
  export * from "./read-output-contracts.js";
17
18
  export * from "./agent/refusal-closure.js";
18
19
  export * from "./agent/closed-domain-contracts.js";
@@ -4,7 +4,7 @@
4
4
  * Exposes command and action contract data without loading SDK runtime code.
5
5
  */
6
6
 
7
- !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]="8bdc03e5-c5cd-5842-b438-cf7bc79863f0")}catch(e){}}();
7
+ !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]="b47a3cc6-caba-5de8-8813-a4e6112dbe61")}catch(e){}}();
8
8
  export * from "./cli-contracts.js";
9
9
  export * from "./cli-contracts/grammar-contracts.js";
10
10
  export * from "./cli-contracts/command-exit-contracts.js";
@@ -15,9 +15,10 @@ export * from "./flag-invocation-contracts.js";
15
15
  export * from "./cli-contracts/flag-lexicon-contracts.js";
16
16
  export * from "./output-token-accounting.js";
17
17
  export * from "./output-contracts.js";
18
+ export * from "./agent/task-transcript-contracts.js";
18
19
  export * from "./read-output-contracts.js";
19
20
  export * from "./agent/refusal-closure.js";
20
21
  export * from "./agent/closed-domain-contracts.js";
21
22
  export * from "./agent/tracker-preflight-contracts.js";
22
23
  //# sourceMappingURL=contracts.js.map
23
- //# debugId=8bdc03e5-c5cd-5842-b438-cf7bc79863f0
24
+ //# debugId=b47a3cc6-caba-5de8-8813-a4e6112dbe61
@@ -107,6 +107,12 @@ export declare function wrapNpmPackResolutionError(spec: string, error: unknown)
107
107
  declare function resolveNpmPackSpec(spec: string): Promise<string>;
108
108
  /** Implements normalize npm local file alias spec for the public runtime surface of this module. */
109
109
  export declare function normalizeNpmLocalFileAliasSpec(spec: string, cwd?: string): string;
110
+ /**
111
+ * Parse npm pack output and bind the reported artifact to its isolated target.
112
+ *
113
+ * Supports current JSON metadata and the legacy filename-only form while
114
+ * refusing absolute or traversing results before the filesystem is consulted.
115
+ */
110
116
  declare function parsePackedNpmPackage(stdout: string, packDirectory: string): {
111
117
  tarball: string;
112
118
  package?: string;
@@ -118,6 +124,13 @@ declare function resolveNpmSourceDirectory(source: NpmInstallSource): Promise<{
118
124
  version?: string;
119
125
  cleanup: () => Promise<void>;
120
126
  }>;
127
+ /**
128
+ * Resolve an npm source with an injectable, argv-safe package-manager runner.
129
+ *
130
+ * Local package directories remain in place, while local and registry archives
131
+ * share the same bounded validation, dependency installation, and cleanup
132
+ * contract. Registry artifacts must also exist inside the requested pack root.
133
+ */
121
134
  declare function resolveNpmSourceDirectoryWithRunner(source: NpmInstallSource, npmRunner: typeof runNpmCommand): Promise<{
122
135
  directory: string;
123
136
  package?: string;
@@ -4,7 +4,7 @@
4
4
  * Implements extension package-management support for Install Sources.
5
5
  */
6
6
 
7
- !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]="89b84412-aa15-5868-95b3-c8d898b1f480")}catch(e){}}();
7
+ !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]="404342eb-68ab-5b7d-9a5a-ade1c8e98546")}catch(e){}}();
8
8
  import { execFile } from "node:child_process";
9
9
  import fs from "node:fs/promises";
10
10
  import os from "node:os";
@@ -397,38 +397,63 @@ export function normalizeNpmLocalFileAliasSpec(spec, cwd = process.cwd()) {
397
397
  : decodedPath;
398
398
  return `${packageName}@${nativePath}`;
399
399
  }
400
+ /**
401
+ * Parse npm pack output and bind the reported artifact to its isolated target.
402
+ *
403
+ * Supports current JSON metadata and the legacy filename-only form while
404
+ * refusing absolute or traversing results before the filesystem is consulted.
405
+ */
400
406
  function parsePackedNpmPackage(stdout, packDirectory) {
407
+ let parsed;
401
408
  try {
402
- const parsed = JSON.parse(stdout);
403
- const first = Array.isArray(parsed) ? parsed[0] : undefined;
404
- if (first &&
405
- typeof first.filename === "string" &&
406
- first.filename.trim().length > 0) {
407
- return {
408
- tarball: path.resolve(packDirectory, first.filename),
409
- package: typeof first.name === "string" ? first.name : undefined,
410
- version: typeof first.version === "string" ? first.version : undefined,
411
- };
412
- }
409
+ parsed = JSON.parse(stdout);
413
410
  }
414
411
  catch {
415
412
  // Fall back to the last stdout line for older npm output.
416
413
  }
417
- const lastLine = stdout
418
- .split(/\r?\n/)
419
- .map((line) => line.trim())
420
- .filter((line) => line.length > 0)
421
- .at(-1);
422
- if (!lastLine) {
414
+ const first = Array.isArray(parsed)
415
+ ? parsed[0]
416
+ : undefined;
417
+ const filename = first &&
418
+ typeof first.filename === "string" &&
419
+ first.filename.trim().length > 0
420
+ ? first.filename
421
+ : stdout
422
+ .split(/\r?\n/)
423
+ .map((line) => line.trim())
424
+ .filter((line) => line.length > 0)
425
+ .at(-1);
426
+ if (!filename) {
423
427
  throw new PmCliError("npm pack did not report a tarball filename.", EXIT_CODE.GENERIC_FAILURE);
424
428
  }
429
+ const tarball = path.resolve(packDirectory, filename);
430
+ const relativeTarball = path.relative(packDirectory, tarball);
431
+ if (relativeTarball.length === 0 ||
432
+ relativeTarball === ".." ||
433
+ relativeTarball.startsWith(`..${path.sep}`) ||
434
+ path.isAbsolute(relativeTarball)) {
435
+ throw new PmCliError("npm pack reported a package archive outside its isolated destination.", EXIT_CODE.GENERIC_FAILURE, {
436
+ code: "npm_package_archive_unsafe",
437
+ required: "Retry with a trusted npm client that writes its archive inside the requested pack destination.",
438
+ why: "pm will not read a package-manager artifact outside the isolated directory created for this install.",
439
+ });
440
+ }
425
441
  return {
426
- tarball: path.resolve(packDirectory, lastLine),
442
+ tarball,
443
+ package: typeof first?.name === "string" ? first.name : undefined,
444
+ version: typeof first?.version === "string" ? first.version : undefined,
427
445
  };
428
446
  }
429
447
  async function resolveNpmSourceDirectory(source) {
430
448
  return resolveNpmSourceDirectoryWithRunner(source, runNpmCommand);
431
449
  }
450
+ /**
451
+ * Resolve an npm source with an injectable, argv-safe package-manager runner.
452
+ *
453
+ * Local package directories remain in place, while local and registry archives
454
+ * share the same bounded validation, dependency installation, and cleanup
455
+ * contract. Registry artifacts must also exist inside the requested pack root.
456
+ */
432
457
  async function resolveNpmSourceDirectoryWithRunner(source, npmRunner) {
433
458
  const localPackageRoot = await resolveLocalNpmPackagePath(source.spec);
434
459
  if (localPackageRoot) {
@@ -451,9 +476,7 @@ async function resolveNpmSourceDirectoryWithRunner(source, npmRunner) {
451
476
  }
452
477
  const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "pm-npm-package-source-"));
453
478
  const packDirectory = path.join(tempRoot, "pack");
454
- const extractDirectory = path.join(tempRoot, "extract");
455
479
  await fs.mkdir(packDirectory, { recursive: true });
456
- await fs.mkdir(extractDirectory, { recursive: true });
457
480
  try {
458
481
  const packSpec = await resolveNpmPackSpec(source.spec);
459
482
  const packStdout = await npmRunner([
@@ -464,16 +487,25 @@ async function resolveNpmSourceDirectoryWithRunner(source, npmRunner) {
464
487
  packDirectory,
465
488
  ]);
466
489
  const packed = parsePackedNpmPackage(packStdout, packDirectory);
467
- await execFileAsync("tar", ["-xzf", packed.tarball, "-C", extractDirectory], { encoding: "utf8" });
468
- const packageRoot = path.join(extractDirectory, "package");
469
- await installNpmPackageRuntimeDependencies(packageRoot);
470
- const directory = await resolvePackageExtensionDirectory(packageRoot, source.input);
490
+ if (!(await pathExists(packed.tarball))) {
491
+ throw new PmCliError("npm pack did not create its reported package archive.", EXIT_CODE.GENERIC_FAILURE, {
492
+ code: "npm_package_archive_missing",
493
+ required: "Retry the npm package install with a healthy registry and writable temporary directory.",
494
+ why: "The package manager reported a tarball filename that was absent before validation, so pm cannot safely extract or install it.",
495
+ });
496
+ }
497
+ const extracted = await extractLocalPackageArchive(packed.tarball);
471
498
  return {
472
- directory,
473
- package: packed.package,
474
- version: packed.version,
499
+ directory: extracted.directory,
500
+ package: packed.package ?? extracted.package,
501
+ version: packed.version ?? extracted.version,
475
502
  cleanup: async () => {
476
- await fs.rm(tempRoot, { recursive: true, force: true });
503
+ try {
504
+ await extracted.cleanup();
505
+ }
506
+ finally {
507
+ await fs.rm(tempRoot, { recursive: true, force: true });
508
+ }
477
509
  },
478
510
  };
479
511
  }
@@ -962,4 +994,4 @@ export const _testOnlyInstallSources = {
962
994
  runNpmCommand,
963
995
  };
964
996
  //# sourceMappingURL=install-sources.js.map
965
- //# debugId=89b84412-aa15-5868-95b3-c8d898b1f480
997
+ //# debugId=404342eb-68ab-5b7d-9a5a-ade1c8e98546
@@ -1,6 +1,6 @@
1
1
  /** Generated partition 1 of the exhaustive error-code catalog. */
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c51fce27-5acd-513d-83c4-5fd75bd999f9")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="95253070-db43-5ddd-8468-7d001bc6657b")}catch(e){}}();
4
4
  export const PM_ERROR_CODE_CATALOG_PART_1 = [
5
5
  {
6
6
  code: "acceptance_criteria_mutation_conflict",
@@ -122,6 +122,18 @@ export const PM_ERROR_CODE_CATALOG_PART_1 = [
122
122
  canonical_code: "annotation_flag_like_value",
123
123
  aliases: [],
124
124
  },
125
+ {
126
+ code: "annotation_if_absent_without_append",
127
+ meaning: "Annotation if absent without append condition.",
128
+ stability: "provisional",
129
+ exit_code: 2,
130
+ class: "usage",
131
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
132
+ sources: ["sdk/annotations.ts"],
133
+ emitting_commands: ["*"],
134
+ canonical_code: "annotation_if_absent_without_append",
135
+ aliases: [],
136
+ },
125
137
  {
126
138
  code: "annotation_message_without_text",
127
139
  meaning: "Annotation message without text condition.",
@@ -2088,6 +2100,18 @@ export const PM_ERROR_CODE_CATALOG_PART_1 = [
2088
2100
  canonical_code: "merge_root_not_found",
2089
2101
  aliases: [],
2090
2102
  },
2103
+ {
2104
+ code: "missing_allowed_values",
2105
+ meaning: "Missing allowed values condition.",
2106
+ stability: "provisional",
2107
+ exit_code: 1,
2108
+ class: "generic_failure",
2109
+ recovery: "Inspect the structured error guidance and retry the suggested command.",
2110
+ sources: ["sdk/agent/refusal-closure.ts"],
2111
+ emitting_commands: ["*"],
2112
+ canonical_code: "missing_allowed_values",
2113
+ aliases: [],
2114
+ },
2091
2115
  ];
2092
2116
  //# sourceMappingURL=generated-error-code-catalog-part-1.js.map
2093
- //# debugId=c51fce27-5acd-513d-83c4-5fd75bd999f9
2117
+ //# debugId=95253070-db43-5ddd-8468-7d001bc6657b