@unbrained/pm-cli 2026.5.14 → 2026.5.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +4 -4
- package/AGENTS.md +78 -457
- package/CHANGELOG.md +71 -0
- package/CONTRIBUTING.md +1 -0
- package/README.md +8 -6
- package/dist/cli/argv-utils.js +4 -1
- package/dist/cli/argv-utils.js.map +1 -1
- package/dist/cli/bootstrap-args.js +4 -1
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.js +19 -1
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.js +4 -1
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/aggregate.js +5 -2
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/annotation-command.d.ts +49 -0
- package/dist/cli/commands/annotation-command.js +135 -0
- package/dist/cli/commands/annotation-command.js.map +1 -0
- package/dist/cli/commands/append.js +5 -6
- package/dist/cli/commands/append.js.map +1 -1
- package/dist/cli/commands/calendar.js +5 -5
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/claim.d.ts +3 -0
- package/dist/cli/commands/claim.js +29 -23
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.js +63 -8
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +4 -1
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/comments.d.ts +5 -0
- package/dist/cli/commands/comments.js +29 -116
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.js +198 -15
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.js +4 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.js +21 -13
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +9 -0
- package/dist/cli/commands/contracts.js +314 -64
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +77 -48
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +9 -3
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/delete.d.ts +3 -0
- package/dist/cli/commands/delete.js +11 -7
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/deps.js +4 -1
- package/dist/cli/commands/deps.js.map +1 -1
- package/dist/cli/commands/docs.d.ts +1 -0
- package/dist/cli/commands/docs.js +6 -7
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/event-validation-messages.d.ts +3 -0
- package/dist/cli/commands/event-validation-messages.js +44 -0
- package/dist/cli/commands/event-validation-messages.js.map +1 -0
- package/dist/cli/commands/extension.d.ts +3 -1
- package/dist/cli/commands/extension.js +259 -52
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/files.js +8 -12
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/gc.js +19 -3
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/get.d.ts +10 -5
- package/dist/cli/commands/get.js +135 -20
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/guide.js +6 -8
- package/dist/cli/commands/guide.js.map +1 -1
- package/dist/cli/commands/health.d.ts +14 -0
- package/dist/cli/commands/health.js +269 -67
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-redact.d.ts +50 -0
- package/dist/cli/commands/history-redact.js +476 -0
- package/dist/cli/commands/history-redact.js.map +1 -0
- package/dist/cli/commands/history-repair.d.ts +33 -0
- package/dist/cli/commands/history-repair.js +166 -0
- package/dist/cli/commands/history-repair.js.map +1 -0
- package/dist/cli/commands/history.d.ts +4 -0
- package/dist/cli/commands/history.js +12 -79
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +5 -1
- package/dist/cli/commands/index.js +9 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init-agent-guidance.d.ts +31 -0
- package/dist/cli/commands/init-agent-guidance.js +336 -0
- package/dist/cli/commands/init-agent-guidance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +42 -0
- package/dist/cli/commands/init.js +96 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learnings.js +22 -118
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/linked-test-entry.d.ts +3 -0
- package/dist/cli/commands/linked-test-entry.js +62 -0
- package/dist/cli/commands/linked-test-entry.js.map +1 -0
- package/dist/cli/commands/list.d.ts +1 -0
- package/dist/cli/commands/list.js +72 -38
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/metadata-normalizers.js +4 -1
- package/dist/cli/commands/metadata-normalizers.js.map +1 -1
- package/dist/cli/commands/normalize.js +4 -1
- package/dist/cli/commands/normalize.js.map +1 -1
- package/dist/cli/commands/notes.js +22 -118
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +121 -0
- package/dist/cli/commands/plan.js +1137 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/reindex.js +4 -1
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.js +9 -49
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +31 -0
- package/dist/cli/commands/schema.js +98 -0
- package/dist/cli/commands/schema.js.map +1 -0
- package/dist/cli/commands/search.js +156 -40
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.js +4 -1
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/templates.d.ts +4 -0
- package/dist/cli/commands/templates.js +91 -16
- package/dist/cli/commands/templates.js.map +1 -1
- package/dist/cli/commands/test-all.js +6 -7
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test-runs.js +4 -1
- package/dist/cli/commands/test-runs.js.map +1 -1
- package/dist/cli/commands/test.d.ts +1 -0
- package/dist/cli/commands/test.js +9 -9
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +6 -7
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.js +204 -103
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/upgrade.js +6 -3
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +3 -1
- package/dist/cli/commands/validate.js +44 -64
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +99 -6
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-help.d.ts +0 -1
- package/dist/cli/extension-command-help.js +4 -12
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.d.ts +1 -0
- package/dist/cli/extension-command-options.js +108 -6
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/guide-topics.js +4 -1
- package/dist/cli/guide-topics.js.map +1 -1
- package/dist/cli/help-content.d.ts +0 -1
- package/dist/cli/help-content.js +46 -22
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/help-json-payload.d.ts +1 -0
- package/dist/cli/help-json-payload.js +35 -2
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.js +214 -30
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.js +4 -1
- package/dist/cli/migration-gates.js.map +1 -1
- package/dist/cli/register-list-query.d.ts +1 -1
- package/dist/cli/register-list-query.js +75 -29
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.d.ts +1 -1
- package/dist/cli/register-mutation.js +430 -38
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +47 -10
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +47 -25
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +0 -2
- package/dist/cli/registration-helpers.js +21 -40
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli/shared-parsers.js +4 -1
- package/dist/cli/shared-parsers.js.map +1 -1
- package/dist/cli/telemetry-flush.js +4 -1
- package/dist/cli/telemetry-flush.js.map +1 -1
- package/dist/cli.js +65 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/extensions/extension-types.js +4 -1
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +0 -1
- package/dist/core/extensions/index.js +4 -13
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/item-fields.js +4 -1
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.js +78 -60
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runtime-registrations.js +4 -1
- package/dist/core/extensions/runtime-registrations.js.map +1 -1
- package/dist/core/fs/fs-utils.js +4 -1
- package/dist/core/fs/fs-utils.js.map +1 -1
- package/dist/core/fs/index.js +4 -1
- package/dist/core/fs/index.js.map +1 -1
- package/dist/core/fs/path-utils.d.ts +1 -0
- package/dist/core/fs/path-utils.js +12 -0
- package/dist/core/fs/path-utils.js.map +1 -0
- package/dist/core/history/drift-scan.d.ts +11 -0
- package/dist/core/history/drift-scan.js +67 -0
- package/dist/core/history/drift-scan.js.map +1 -0
- package/dist/core/history/history-stream-policy.js +4 -1
- package/dist/core/history/history-stream-policy.js.map +1 -1
- package/dist/core/history/history.js +4 -1
- package/dist/core/history/history.js.map +1 -1
- package/dist/core/history/index.js +4 -1
- package/dist/core/history/index.js.map +1 -1
- package/dist/core/history/replay.d.ts +82 -0
- package/dist/core/history/replay.js +249 -0
- package/dist/core/history/replay.js.map +1 -0
- package/dist/core/item/id.js +4 -1
- package/dist/core/item/id.js.map +1 -1
- package/dist/core/item/index.js +4 -1
- package/dist/core/item/index.js.map +1 -1
- package/dist/core/item/item-format.js +250 -8
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/item-type-definition.d.ts +52 -0
- package/dist/core/item/item-type-definition.js +123 -0
- package/dist/core/item/item-type-definition.js.map +1 -0
- package/dist/core/item/parent-reference-policy.js +4 -1
- package/dist/core/item/parent-reference-policy.js.map +1 -1
- package/dist/core/item/parse.js +34 -3
- package/dist/core/item/parse.js.map +1 -1
- package/dist/core/item/priority.d.ts +23 -0
- package/dist/core/item/priority.js +55 -0
- package/dist/core/item/priority.js.map +1 -0
- package/dist/core/item/sprint-release-format.js +4 -1
- package/dist/core/item/sprint-release-format.js.map +1 -1
- package/dist/core/item/status.d.ts +14 -1
- package/dist/core/item/status.js +24 -1
- package/dist/core/item/status.js.map +1 -1
- package/dist/core/item/toon-decode.d.ts +19 -0
- package/dist/core/item/toon-decode.js +69 -0
- package/dist/core/item/toon-decode.js.map +1 -0
- package/dist/core/item/type-registry.js +15 -83
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/lock/index.js +4 -1
- package/dist/core/lock/index.js.map +1 -1
- package/dist/core/lock/lock.js +4 -1
- package/dist/core/lock/lock.js.map +1 -1
- package/dist/core/output/output.d.ts +4 -0
- package/dist/core/output/output.js +47 -6
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/packages/manifest.d.ts +1 -0
- package/dist/core/packages/manifest.js +6 -8
- package/dist/core/packages/manifest.js.map +1 -1
- package/dist/core/packages/root.d.ts +3 -0
- package/dist/core/packages/root.js +51 -0
- package/dist/core/packages/root.js.map +1 -0
- package/dist/core/schema/item-types-file.d.ts +85 -0
- package/dist/core/schema/item-types-file.js +243 -0
- package/dist/core/schema/item-types-file.js.map +1 -0
- package/dist/core/schema/runtime-field-filters.js +4 -1
- package/dist/core/schema/runtime-field-filters.js.map +1 -1
- package/dist/core/schema/runtime-field-values.js +4 -1
- package/dist/core/schema/runtime-field-values.js.map +1 -1
- package/dist/core/schema/runtime-schema.d.ts +2 -1
- package/dist/core/schema/runtime-schema.js +13 -8
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/cache.js +7 -2
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/corpus.d.ts +2 -0
- package/dist/core/search/corpus.js +77 -2
- package/dist/core/search/corpus.js.map +1 -1
- package/dist/core/search/embedding-batches.js +21 -7
- package/dist/core/search/embedding-batches.js.map +1 -1
- package/dist/core/search/http-client.js +4 -1
- package/dist/core/search/http-client.js.map +1 -1
- package/dist/core/search/providers.js +4 -1
- package/dist/core/search/providers.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +12 -3
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.js +4 -1
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.js +4 -1
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.js +10 -13
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/shared/author.d.ts +1 -0
- package/dist/core/shared/author.js +9 -0
- package/dist/core/shared/author.js.map +1 -0
- package/dist/core/shared/command-types.js +4 -1
- package/dist/core/shared/command-types.js.map +1 -1
- package/dist/core/shared/conflict-markers.js +4 -1
- package/dist/core/shared/conflict-markers.js.map +1 -1
- package/dist/core/shared/constants.d.ts +2 -2
- package/dist/core/shared/constants.js +24 -1
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/errors.js +4 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/shared/index.js +4 -1
- package/dist/core/shared/index.js.map +1 -1
- package/dist/core/shared/lazy-module.d.ts +1 -0
- package/dist/core/shared/lazy-module.js +11 -0
- package/dist/core/shared/lazy-module.js.map +1 -0
- package/dist/core/shared/levenshtein.js +4 -1
- package/dist/core/shared/levenshtein.js.map +1 -1
- package/dist/core/shared/option-alias-visibility.d.ts +44 -0
- package/dist/core/shared/option-alias-visibility.js +76 -0
- package/dist/core/shared/option-alias-visibility.js.map +1 -0
- package/dist/core/shared/primitives.js +4 -1
- package/dist/core/shared/primitives.js.map +1 -1
- package/dist/core/shared/serialization.js +4 -1
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/shared/text-normalization.d.ts +0 -1
- package/dist/core/shared/text-normalization.js +4 -4
- package/dist/core/shared/text-normalization.js.map +1 -1
- package/dist/core/shared/time.js +4 -1
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +8 -3
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/index.js +4 -1
- package/dist/core/store/index.js.map +1 -1
- package/dist/core/store/item-format-migration.js +4 -1
- package/dist/core/store/item-format-migration.js.map +1 -1
- package/dist/core/store/item-store.d.ts +4 -0
- package/dist/core/store/item-store.js +133 -39
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/paths.js +4 -1
- package/dist/core/store/paths.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +106 -0
- package/dist/core/store/settings-validator.js +279 -0
- package/dist/core/store/settings-validator.js.map +1 -0
- package/dist/core/store/settings.js +32 -331
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/consent.js +4 -1
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/telemetry/observability.d.ts +1 -1
- package/dist/core/telemetry/observability.js +11 -2
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.js +34 -6
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/background-runs.js +4 -1
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/core/test/item-test-run-tracking.js +4 -1
- package/dist/core/test/item-test-run-tracking.js.map +1 -1
- package/dist/mcp/server.js +182 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +10 -3
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +4 -1
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +13 -2
- package/dist/sdk/cli-contracts.js +410 -26
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.js +4 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +25 -1
- package/dist/sdk/runtime.js +48 -2
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types.d.ts +92 -2
- package/dist/types.js +42 -1
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +23 -7
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
- package/docs/CODEX_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +117 -12
- package/docs/CONFIGURATION.md +5 -2
- package/docs/EXTENSIONS.md +158 -814
- package/docs/QUICKSTART.md +11 -5
- package/docs/README.md +7 -6
- package/docs/RELEASING.md +13 -9
- package/docs/SDK.md +11 -2
- package/docs/TESTING.md +2 -2
- package/marketplace.json +3 -3
- package/package.json +15 -12
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/README.md +4 -2
- package/packages/pm-calendar/extensions/calendar/index.js +22 -3
- package/packages/pm-calendar/extensions/calendar/index.ts +22 -3
- package/packages/pm-calendar/extensions/calendar/runtime.js +26 -7
- package/packages/pm-calendar/extensions/calendar/runtime.ts +26 -7
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/README.md +8 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +74 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +75 -1
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +67 -9
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +67 -9
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/README.md +1 -1
- package/packages/pm-templates/extensions/templates/runtime.js +11 -202
- package/packages/pm-templates/extensions/templates/runtime.ts +38 -230
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/.claude-plugin/plugin.json +2 -2
- package/plugins/{pm-cli-claude → pm-claude}/.mcp.json +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/README.md +4 -4
- package/plugins/{pm-cli-claude → pm-claude}/agents/pm-coordinator.md +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/commands/pm-init.md +10 -1
- package/plugins/{pm-cli-claude → pm-claude}/commands/pm-planner.md +18 -0
- package/plugins/{pm-cli-claude → pm-claude}/skills/pm-planner/SKILL.md +46 -1
- package/plugins/{pm-cli-codex → pm-codex}/.codex-plugin/plugin.json +3 -3
- package/plugins/{pm-cli-codex → pm-codex}/.mcp.json +1 -1
- package/plugins/{pm-cli-codex → pm-codex}/README.md +7 -4
- package/plugins/pm-codex/skills/pm-native/SKILL.md +81 -0
- package/scripts/finalize-build.mjs +28 -0
- package/scripts/prepare-build-cache.mjs +37 -0
- package/dist/core/output/command-aware.d.ts +0 -1
- package/dist/core/output/command-aware.js +0 -394
- package/dist/core/output/command-aware.js.map +0 -1
- package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +0 -57
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-delivery-chain.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-triage-agent.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-verification-agent.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-audit.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-calendar.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-close-task.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-developer.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-list.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-new.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-release.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-search.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-start-task.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-status.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-triage.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-workflow.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/hooks/hooks.json +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/hooks/session-start.mjs +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/scripts/pm-mcp-server.mjs +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-audit/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-developer/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-release/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-workflow/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/assets/pm-cli-small.svg +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-audit.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-close-task.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-start-task.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/agents/openai.yaml +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-native/agents/openai.yaml +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/agents/openai.yaml +0 -0
|
@@ -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]="64b2c911-6e92-5df3-a24a-40c811b5939e")}catch(e){}}();
|
|
1
3
|
import { pathExists, removeFileIfExists, writeFileAtomic } from "../../core/fs/fs-utils.js";
|
|
2
4
|
import { appendHistoryEntry, createHistoryEntry } from "../../core/history/history.js";
|
|
3
5
|
import { generateItemId, normalizeItemId } from "../../core/item/id.js";
|
|
@@ -5,9 +7,11 @@ import { canonicalDocument, normalizeFrontMatter, serializeItemDocument } from "
|
|
|
5
7
|
import { normalizeParentReferenceValue, validateMissingParentReference, } from "../../core/item/parent-reference-policy.js";
|
|
6
8
|
import { validateSprintOrReleaseValue } from "../../core/item/sprint-release-format.js";
|
|
7
9
|
import { createStdinTokenResolver, parseCsvKv, parseOptionalNumber, parseTags } from "../../core/item/parse.js";
|
|
10
|
+
import { resolvePriority } from "../../core/item/priority.js";
|
|
8
11
|
import { normalizeStatusInput } from "../../core/item/status.js";
|
|
9
12
|
import { canonicalizeCommandOptionKey, commandOptionFlagLabel, resolveItemTypeRegistry, resolveCommandOptionPolicyState, resolveTypeDefinition, resolveTypeName, validateTypeOptions, } from "../../core/item/type-registry.js";
|
|
10
13
|
import { acquireLock } from "../../core/lock/lock.js";
|
|
14
|
+
import { buildInvalidTypeError } from "../../core/schema/item-types-file.js";
|
|
11
15
|
import { collectRuntimeCreateFieldValues } from "../../core/schema/runtime-field-values.js";
|
|
12
16
|
import { resolveRuntimeFieldRegistry, resolveRuntimeStatusRegistry, } from "../../core/schema/runtime-schema.js";
|
|
13
17
|
import { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from "../../core/shared/constants.js";
|
|
@@ -19,7 +23,9 @@ import { locateItem } from "../../core/store/item-store.js";
|
|
|
19
23
|
import { getHistoryPath, getItemPath, getSettingsPath, resolvePmRoot } from "../../core/store/paths.js";
|
|
20
24
|
import { readSettings } from "../../core/store/settings.js";
|
|
21
25
|
import { normalizeRiskInput, normalizeSeverityInput, parseConfidenceInput, parseRegressionInput, } from "./metadata-normalizers.js";
|
|
22
|
-
import {
|
|
26
|
+
import { resolveEventEndAt } from "./event-validation-messages.js";
|
|
27
|
+
import { looksLikeStructuredLinkedTestEntry, normalizeStructuredLinkedTestEntry } from "./linked-test-entry.js";
|
|
28
|
+
import { DEPENDENCY_KIND_VALUES, ISSUE_SEVERITY_VALUES, RECURRENCE_FREQUENCY_VALUES, RECURRENCE_WEEKDAY_VALUES, RISK_VALUES, SCOPE_VALUES, weekdayOrderIndex, } from "../../types/index.js";
|
|
23
29
|
const CREATE_MODE_VALUES = ["strict", "progressive"];
|
|
24
30
|
const SCHEDULE_CREATE_PRESET_VALUES = ["lightweight"];
|
|
25
31
|
const SCHEDULE_CREATE_PRESET_TYPES = new Set(["Reminder", "Meeting", "Event"]);
|
|
@@ -314,9 +320,6 @@ function parseCreateUnsetTargets(raw, runtimeFieldRegistry) {
|
|
|
314
320
|
}
|
|
315
321
|
return { frontMatterKeys, optionKeys };
|
|
316
322
|
}
|
|
317
|
-
function weekdayOrderIndex(value) {
|
|
318
|
-
return RECURRENCE_WEEKDAY_VALUES.indexOf(value);
|
|
319
|
-
}
|
|
320
323
|
function parseDependencies(raw, nowValue, prefix) {
|
|
321
324
|
if (!raw || raw.length === 0)
|
|
322
325
|
return { values: undefined, explicitEmpty: false };
|
|
@@ -597,26 +600,8 @@ export function parseTests(raw) {
|
|
|
597
600
|
assertNoLegacyNoneTokens(raw, "--test", "Use --clear-tests to clear linked tests.");
|
|
598
601
|
const values = raw.map((entry) => {
|
|
599
602
|
const trimmedEntry = entry.trim();
|
|
600
|
-
const kv =
|
|
601
|
-
"
|
|
602
|
-
"path",
|
|
603
|
-
"scope",
|
|
604
|
-
"timeout",
|
|
605
|
-
"timeout_seconds",
|
|
606
|
-
"pm_context_mode",
|
|
607
|
-
"env_set",
|
|
608
|
-
"env_clear",
|
|
609
|
-
"shared_host_safe",
|
|
610
|
-
"assert_stdout_contains",
|
|
611
|
-
"assert_stdout_regex",
|
|
612
|
-
"assert_stderr_contains",
|
|
613
|
-
"assert_stderr_regex",
|
|
614
|
-
"assert_stdout_min_lines",
|
|
615
|
-
"assert_json_field_equals",
|
|
616
|
-
"assert_json_field_gte",
|
|
617
|
-
"note",
|
|
618
|
-
])
|
|
619
|
-
? parseCsvKv(entry, "--test")
|
|
603
|
+
const kv = looksLikeStructuredLinkedTestEntry(trimmedEntry)
|
|
604
|
+
? normalizeStructuredLinkedTestEntry(parseCsvKv(entry, "--test"), "--test")
|
|
620
605
|
: { command: trimmedEntry };
|
|
621
606
|
const command = parseOptionalString(kv.command);
|
|
622
607
|
const filePath = parseOptionalString(kv.path);
|
|
@@ -676,10 +661,10 @@ function parseReminders(raw, nowValue) {
|
|
|
676
661
|
assertNoLegacyNoneTokens(raw, "--reminder", "Use --clear-reminders to clear reminders.");
|
|
677
662
|
const values = raw.map((entry) => {
|
|
678
663
|
const kv = parseCsvKv(entry, "--reminder");
|
|
679
|
-
const atRaw = parseOptionalString(kv.at);
|
|
680
|
-
const textRaw = parseOptionalString(kv.text);
|
|
664
|
+
const atRaw = parseOptionalString(kv.at ?? kv.date);
|
|
665
|
+
const textRaw = parseOptionalString(kv.text ?? kv.title);
|
|
681
666
|
if (!atRaw || !textRaw) {
|
|
682
|
-
throw new PmCliError("--reminder requires at=<iso|relative>
|
|
667
|
+
throw new PmCliError("--reminder requires at=<iso|relative> or date=<iso|relative>, plus text=<value> or title=<value>", EXIT_CODE.USAGE);
|
|
683
668
|
}
|
|
684
669
|
const text = textRaw.trim();
|
|
685
670
|
if (!text) {
|
|
@@ -772,10 +757,8 @@ function parseEvents(raw, nowValue) {
|
|
|
772
757
|
}
|
|
773
758
|
const startAt = resolveIsoOrRelative(startRaw, referenceDate, "event.start");
|
|
774
759
|
const endRaw = parseOptionalString(kv.end)?.trim();
|
|
775
|
-
const
|
|
776
|
-
|
|
777
|
-
throw new PmCliError("--event end must be after start", EXIT_CODE.USAGE);
|
|
778
|
-
}
|
|
760
|
+
const durationRaw = parseOptionalString(kv.duration)?.trim();
|
|
761
|
+
const endAt = resolveEventEndAt(startAt, endRaw, durationRaw, referenceDate);
|
|
779
762
|
const titleRaw = parseOptionalString(kv.title);
|
|
780
763
|
const descriptionRaw = parseOptionalString(kv.description);
|
|
781
764
|
const locationRaw = parseOptionalString(kv.location);
|
|
@@ -811,10 +794,10 @@ function parseEvents(raw, nowValue) {
|
|
|
811
794
|
});
|
|
812
795
|
return { values, explicitEmpty: false };
|
|
813
796
|
}
|
|
814
|
-
function buildChangedFields(frontMatter, explicitUnsets) {
|
|
797
|
+
function buildChangedFields(frontMatter, body, explicitUnsets) {
|
|
815
798
|
const changed = [
|
|
816
799
|
...FRONT_MATTER_KEY_ORDER.filter((key) => frontMatter[key] !== undefined),
|
|
817
|
-
"body",
|
|
800
|
+
...(body.length > 0 ? ["body"] : []),
|
|
818
801
|
...explicitUnsets.map((key) => `unset:${key}`),
|
|
819
802
|
];
|
|
820
803
|
return Array.from(new Set(changed));
|
|
@@ -1003,7 +986,7 @@ function requireCreateOptionByType(typeDefinition, options, createMode, clearOpt
|
|
|
1003
986
|
return false;
|
|
1004
987
|
};
|
|
1005
988
|
const hasOptionMutation = (optionKey) => hasOptionValue(optionKey) || clearOptionKeys.has(optionKey);
|
|
1006
|
-
const baseRequiredOptions = new Set(["title", "
|
|
989
|
+
const baseRequiredOptions = new Set(["title", "type"]);
|
|
1007
990
|
if (createMode === "strict") {
|
|
1008
991
|
for (const field of typeDefinition.required_create_fields) {
|
|
1009
992
|
baseRequiredOptions.add(normalizeCreatePolicyOptionKey(field, typeName, "required_create_fields"));
|
|
@@ -1083,11 +1066,11 @@ function createExampleTokensForFlag(flag, typeName, openStatus) {
|
|
|
1083
1066
|
case "--learning":
|
|
1084
1067
|
return ["--learning", "\"author=maintainer,created_at=now,text=Durable lesson\""];
|
|
1085
1068
|
case "--file":
|
|
1086
|
-
return ["--file", "\"path=src/example.ts,
|
|
1069
|
+
return ["--file", "\"path=src/example.ts,note=implementation file\""];
|
|
1087
1070
|
case "--test":
|
|
1088
|
-
return ["--test", "\"command=node scripts/run-tests.mjs test,
|
|
1071
|
+
return ["--test", "\"command=node scripts/run-tests.mjs test,timeout_seconds=240\""];
|
|
1089
1072
|
case "--doc":
|
|
1090
|
-
return ["--doc", "\"path=README.md,
|
|
1073
|
+
return ["--doc", "\"path=README.md,note=reference doc\""];
|
|
1091
1074
|
default:
|
|
1092
1075
|
return [flag, "\"<value>\""];
|
|
1093
1076
|
}
|
|
@@ -1112,6 +1095,9 @@ function buildTypeSpecificCreateExample(typeDefinition, missingCreateFlags, miss
|
|
|
1112
1095
|
}
|
|
1113
1096
|
function requireStringOption(value, flag) {
|
|
1114
1097
|
if (value === undefined) {
|
|
1098
|
+
if (flag === "--title") {
|
|
1099
|
+
throw new PmCliError('Missing required option --title. Why required: every item needs a human-readable title for lookup, search, and reporting. Retry: pass the title as the first positional argument (example: pm create "Fix login bug" --type Issue) or with --title.', EXIT_CODE.USAGE);
|
|
1100
|
+
}
|
|
1115
1101
|
throw new PmCliError(`Missing required option ${flag}`, EXIT_CODE.USAGE);
|
|
1116
1102
|
}
|
|
1117
1103
|
return value;
|
|
@@ -1122,11 +1108,7 @@ function selectAuthor(explicitAuthor, settingsAuthor) {
|
|
|
1122
1108
|
return trimmed || "unknown";
|
|
1123
1109
|
}
|
|
1124
1110
|
function ensurePriority(rawPriority) {
|
|
1125
|
-
|
|
1126
|
-
if (![0, 1, 2, 3, 4].includes(parsed)) {
|
|
1127
|
-
throw new PmCliError("Priority must be 0..4 (0=critical, 1=high, 2=medium, 3=low, 4=minimal)", EXIT_CODE.USAGE);
|
|
1128
|
-
}
|
|
1129
|
-
return parsed;
|
|
1111
|
+
return resolvePriority(rawPriority);
|
|
1130
1112
|
}
|
|
1131
1113
|
function mergeCreateOptionsWithTemplate(templateOptions, explicitOptions) {
|
|
1132
1114
|
const merged = {};
|
|
@@ -1219,12 +1201,27 @@ export async function runCreate(options, global) {
|
|
|
1219
1201
|
const templateOptions = await loadCreateTemplateOptionsFromRuntime(templateName, global, pmRoot);
|
|
1220
1202
|
resolvedOptions = normalizeLegacyNoneCreateOptions(mergeCreateOptionsWithTemplate(templateOptions, resolvedOptions));
|
|
1221
1203
|
}
|
|
1204
|
+
if (resolvedOptions.type === undefined) {
|
|
1205
|
+
// Default-type fallback is suppressed under explicit --create-mode strict, where the strict
|
|
1206
|
+
// required-option contract takes precedence and surfaces the missing_required_option envelope.
|
|
1207
|
+
const explicitStrictMode = typeof resolvedOptions.createMode === "string"
|
|
1208
|
+
&& resolvedOptions.createMode.trim().toLowerCase() === "strict";
|
|
1209
|
+
if (!explicitStrictMode) {
|
|
1210
|
+
const defaultType = settings.governance.create_default_type?.trim();
|
|
1211
|
+
if (defaultType && defaultType.length > 0 && resolveTypeName(defaultType, typeRegistry)) {
|
|
1212
|
+
resolvedOptions.type = defaultType;
|
|
1213
|
+
}
|
|
1214
|
+
else if (resolveTypeName("Task", typeRegistry)) {
|
|
1215
|
+
resolvedOptions.type = "Task";
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1222
1219
|
if (resolvedOptions.type === undefined) {
|
|
1223
1220
|
throw new PmCliError("Missing required option --type <value>", EXIT_CODE.USAGE);
|
|
1224
1221
|
}
|
|
1225
1222
|
const resolvedTypeName = resolveTypeName(resolvedOptions.type, typeRegistry);
|
|
1226
1223
|
if (!resolvedTypeName) {
|
|
1227
|
-
throw new PmCliError(
|
|
1224
|
+
throw new PmCliError(buildInvalidTypeError(resolvedOptions.type, typeRegistry.types), EXIT_CODE.USAGE);
|
|
1228
1225
|
}
|
|
1229
1226
|
const typeDefinition = resolveTypeDefinition(resolvedTypeName, typeRegistry);
|
|
1230
1227
|
if (!typeDefinition) {
|
|
@@ -1448,6 +1445,9 @@ export async function runCreate(options, global) {
|
|
|
1448
1445
|
if (combinedMissingFlags.length > 0) {
|
|
1449
1446
|
const nextValidExample = buildTypeSpecificCreateExample(typeDefinition, missingRequiredCreateFlags, missingRequiredTypeOptionKeys, statusRegistry.open_status);
|
|
1450
1447
|
const nextSteps = [`Run "pm create --help --type ${type}" for type-aware required option guidance.`];
|
|
1448
|
+
if (combinedMissingFlags.includes("--title")) {
|
|
1449
|
+
nextSteps.push('Title can also be passed as the first positional argument (example: pm create "Your title" --type ' + type + ').');
|
|
1450
|
+
}
|
|
1451
1451
|
if (createMode === "strict") {
|
|
1452
1452
|
nextSteps.push('For staged onboarding, retry with "--create-mode progressive".');
|
|
1453
1453
|
if (SCHEDULE_CREATE_PRESET_TYPES.has(type)) {
|
|
@@ -1475,7 +1475,7 @@ export async function runCreate(options, global) {
|
|
|
1475
1475
|
});
|
|
1476
1476
|
}
|
|
1477
1477
|
const id = await generateItemId(pmRoot, settings.id_prefix);
|
|
1478
|
-
|
|
1478
|
+
let status = resolvedOptions.status !== undefined ? parseStatusValue(resolvedOptions.status, statusRegistry) : statusRegistry.open_status;
|
|
1479
1479
|
const priority = resolvedOptions.priority !== undefined ? ensurePriority(resolvedOptions.priority) : 2;
|
|
1480
1480
|
const tags = unsetTargets.frontMatterKeys.has("tags")
|
|
1481
1481
|
? []
|
|
@@ -1549,6 +1549,10 @@ export async function runCreate(options, global) {
|
|
|
1549
1549
|
const parentReferencePolicy = settings.validation.parent_reference;
|
|
1550
1550
|
const sprintReleasePolicy = settings.validation.sprint_release_format;
|
|
1551
1551
|
const validationWarnings = [];
|
|
1552
|
+
// Event-type items with no attached schedule never surface on the calendar; warn (never block).
|
|
1553
|
+
if (type.toLowerCase() === "event" && (events.values === undefined || events.values.length === 0)) {
|
|
1554
|
+
validationWarnings.push(`event_without_schedule:${id}:no_time_set`);
|
|
1555
|
+
}
|
|
1552
1556
|
if (parent !== undefined) {
|
|
1553
1557
|
parent = normalizeParentReferenceValue(parent);
|
|
1554
1558
|
const parentLocated = await locateItem(pmRoot, parent, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
@@ -1576,6 +1580,30 @@ export async function runCreate(options, global) {
|
|
|
1576
1580
|
const blockedBy = unsetTargets.frontMatterKeys.has("blocked_by") || resolvedOptions.blockedBy === undefined
|
|
1577
1581
|
? undefined
|
|
1578
1582
|
: parseOptionalString(resolvedOptions.blockedBy);
|
|
1583
|
+
let dependencyValues = dependencies.values;
|
|
1584
|
+
if (blockedBy !== undefined) {
|
|
1585
|
+
const normalizedBlockedBy = normalizeItemId(blockedBy, settings.id_prefix);
|
|
1586
|
+
const blockedByLocated = await locateItem(pmRoot, normalizedBlockedBy, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
1587
|
+
if (blockedByLocated) {
|
|
1588
|
+
const hasBlockedByDependency = (dependencyValues ?? []).some((dependency) => dependency.id === blockedByLocated.id && dependency.kind === "blocked_by");
|
|
1589
|
+
if (!hasBlockedByDependency) {
|
|
1590
|
+
dependencyValues = [
|
|
1591
|
+
...(dependencyValues ?? []),
|
|
1592
|
+
{
|
|
1593
|
+
id: blockedByLocated.id,
|
|
1594
|
+
kind: "blocked_by",
|
|
1595
|
+
created_at: nowValue,
|
|
1596
|
+
author,
|
|
1597
|
+
},
|
|
1598
|
+
];
|
|
1599
|
+
}
|
|
1600
|
+
if (resolvedOptions.status === undefined) {
|
|
1601
|
+
status = statusRegistry.blocked_statuses.has("blocked")
|
|
1602
|
+
? "blocked"
|
|
1603
|
+
: [...statusRegistry.blocked_statuses].sort((left, right) => left.localeCompare(right))[0] ?? statusRegistry.open_status;
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1579
1607
|
const blockedReason = unsetTargets.frontMatterKeys.has("blocked_reason") || resolvedOptions.blockedReason === undefined
|
|
1580
1608
|
? undefined
|
|
1581
1609
|
: parseOptionalString(resolvedOptions.blockedReason);
|
|
@@ -1621,7 +1649,7 @@ export async function runCreate(options, global) {
|
|
|
1621
1649
|
? undefined
|
|
1622
1650
|
: parseOptionalString(resolvedOptions.customerImpact);
|
|
1623
1651
|
const title = requireStringOption(resolvedOptions.title, "--title");
|
|
1624
|
-
const description =
|
|
1652
|
+
const description = resolvedOptions.description ?? "";
|
|
1625
1653
|
const body = resolvedOptions.body ?? "";
|
|
1626
1654
|
const frontMatter = normalizeFrontMatter({
|
|
1627
1655
|
id,
|
|
@@ -1668,7 +1696,7 @@ export async function runCreate(options, global) {
|
|
|
1668
1696
|
component,
|
|
1669
1697
|
regression,
|
|
1670
1698
|
customer_impact: customerImpact,
|
|
1671
|
-
dependencies:
|
|
1699
|
+
dependencies: dependencyValues,
|
|
1672
1700
|
comments: comments.values,
|
|
1673
1701
|
notes: notes.values,
|
|
1674
1702
|
learnings: learnings.values,
|
|
@@ -1732,7 +1760,7 @@ export async function runCreate(options, global) {
|
|
|
1732
1760
|
finally {
|
|
1733
1761
|
await lockRelease();
|
|
1734
1762
|
}
|
|
1735
|
-
const changedFields = buildChangedFields(frontMatter, explicitUnsetKeys);
|
|
1763
|
+
const changedFields = buildChangedFields(frontMatter, body, explicitUnsetKeys);
|
|
1736
1764
|
const outputItem = structuredClone(frontMatter);
|
|
1737
1765
|
return {
|
|
1738
1766
|
item: outputItem,
|
|
@@ -1740,4 +1768,5 @@ export async function runCreate(options, global) {
|
|
|
1740
1768
|
warnings: [...validationWarnings, ...hookWarnings],
|
|
1741
1769
|
};
|
|
1742
1770
|
}
|
|
1743
|
-
//# sourceMappingURL=create.js.map
|
|
1771
|
+
//# sourceMappingURL=create.js.map
|
|
1772
|
+
//# debugId=64b2c911-6e92-5df3-a24a-40c811b5939e
|