@unbrained/pm-cli 2026.10.4 → 2026.10.5
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 +2 -2
- package/CHANGELOG.md +11 -0
- package/dist/cli/after-command-context-usage.js +1 -1
- package/dist/cli/argv-utils.js +1 -1
- package/dist/cli/bootstrap-args.js +1 -1
- package/dist/cli/bundle-integrity.js +2 -2
- package/dist/cli/command-namespaces.js +1 -1
- package/dist/cli/commander-usage.d.ts +1 -1
- package/dist/cli/commander-usage.js +7 -4
- package/dist/cli/commands/annotations/comments.js +1 -1
- package/dist/cli/commands/annotations/docs.js +1 -1
- package/dist/cli/commands/annotations/files.js +1 -1
- package/dist/cli/commands/annotations/learnings.js +1 -1
- package/dist/cli/commands/annotations/notes.js +1 -1
- package/dist/cli/commands/extension/describe.js +1 -1
- package/dist/cli/commands/extension/extension.js +1 -1
- package/dist/cli/commands/extension/scaffold.js +1 -1
- package/dist/cli/commands/extension/shared.js +1 -1
- package/dist/cli/commands/governance/gc.js +1 -1
- package/dist/cli/commands/governance/health.js +1 -1
- package/dist/cli/commands/governance/telemetry.js +1 -1
- package/dist/cli/commands/governance/validate.js +1 -1
- package/dist/cli/commands/history/activity.js +1 -1
- package/dist/cli/commands/history/history-compact.js +1 -1
- package/dist/cli/commands/history/history-redact.js +1 -1
- package/dist/cli/commands/history/history-repair.js +1 -1
- package/dist/cli/commands/history/history.js +1 -1
- package/dist/cli/commands/history/restore.js +1 -1
- package/dist/cli/commands/lifecycle/append.js +1 -1
- package/dist/cli/commands/lifecycle/claim.js +1 -1
- package/dist/cli/commands/lifecycle/close-many.js +1 -1
- package/dist/cli/commands/lifecycle/close.js +1 -1
- package/dist/cli/commands/lifecycle/copy.js +1 -1
- package/dist/cli/commands/lifecycle/create.js +1 -1
- package/dist/cli/commands/lifecycle/delete.js +1 -1
- package/dist/cli/commands/lifecycle/focus.js +1 -1
- package/dist/cli/commands/lifecycle/plan.js +1 -1
- package/dist/cli/commands/lifecycle/update-many.js +1 -1
- package/dist/cli/commands/lifecycle/update.js +1 -1
- package/dist/cli/commands/query/aggregate.js +1 -1
- package/dist/cli/commands/query/context.js +1 -1
- package/dist/cli/commands/query/deps.js +1 -1
- package/dist/cli/commands/query/duplicates.js +1 -1
- package/dist/cli/commands/query/eval.js +1 -1
- package/dist/cli/commands/query/get.js +1 -1
- package/dist/cli/commands/query/graph.js +1 -1
- package/dist/cli/commands/query/list.js +1 -1
- package/dist/cli/commands/query/next.js +1 -1
- package/dist/cli/commands/query/search.js +1 -1
- package/dist/cli/commands/query/stats.js +1 -1
- package/dist/cli/commands/test/test-all.js +1 -1
- package/dist/cli/commands/test/test-runs.js +1 -1
- package/dist/cli/commands/test/test.js +1 -1
- package/dist/cli/commands/workspace/config.js +1 -1
- package/dist/cli/commands/workspace/contracts.js +1 -1
- package/dist/cli/commands/workspace/init.js +1 -1
- package/dist/cli/commands/workspace/merge.js +1 -1
- package/dist/cli/commands/workspace/profile.js +1 -1
- package/dist/cli/commands/workspace/schema.js +1 -1
- package/dist/cli/commands/workspace/upgrade.js +1 -1
- package/dist/cli/context-intent-invocation.js +1 -1
- package/dist/cli/description-stdin.js +1 -1
- package/dist/cli/error-guidance.js +3 -1
- package/dist/cli/extension-command-help.js +5 -3
- package/dist/cli/extension-command-options.js +1 -1
- package/dist/cli/extension-recovery.js +1 -1
- package/dist/cli/help-content.js +5 -2
- package/dist/cli/help-json-payload.js +6 -3
- package/dist/cli/invocation-profile.js +2 -2
- package/dist/cli/main.js +5 -5
- package/dist/cli/migration-gates.js +1 -1
- package/dist/cli/option-values.js +1 -1
- package/dist/cli/public.js +1 -1
- package/dist/cli/register-annotations.js +1 -1
- package/dist/cli/register-assurance.js +1 -1
- package/dist/cli/register-files-lookup.js +1 -1
- package/dist/cli/register-history-activity.js +1 -1
- package/dist/cli/register-history-author.js +1 -1
- package/dist/cli/register-history-maintenance.js +2 -2
- package/dist/cli/register-list-query.js +10 -10
- package/dist/cli/register-mutation-options.js +1 -1
- package/dist/cli/register-mutation.js +2 -2
- package/dist/cli/register-operations.js +1 -1
- package/dist/cli/register-setup.js +1 -1
- package/dist/cli/register-structured-mutation.js +1 -1
- package/dist/cli/registration-helpers.js +1 -1
- package/dist/cli/runtime/activation.js +1 -1
- package/dist/cli/runtime/invocation-options.js +1 -1
- package/dist/cli/runtime/projection-retry.js +1 -1
- package/dist/cli/runtime/selection.js +1 -1
- package/dist/cli/runtime/telemetry-outcome.js +1 -1
- package/dist/cli/runtime-compatibility-boundary.js +4 -4
- package/dist/cli/schema/registration.js +2 -2
- package/dist/cli/schema-registration-helpers.js +1 -1
- package/dist/cli/search-refresh.js +1 -1
- package/dist/cli/stats-analytics-json.js +1 -1
- package/dist/cli/telemetry-flush.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +163 -163
- package/dist/cli-bundle/chunks/chunk-3CYOBJUK.js +3 -0
- package/dist/cli-bundle/chunks/chunk-5MNOWZPN.js +3 -0
- package/dist/cli-bundle/chunks/chunk-AJ7H6XUF.js +20 -0
- package/dist/cli-bundle/chunks/chunk-D332RXZ7.js +80 -0
- package/dist/cli-bundle/chunks/chunk-HRJ6G6ZG.js +31 -0
- package/dist/cli-bundle/chunks/chunk-KRVI56QE.js +6 -0
- package/dist/cli-bundle/chunks/chunk-N4YGSG6F.js +238 -0
- package/dist/cli-bundle/chunks/{chunk-7CE2DJMA.js → chunk-OOLYASYJ.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-R7CG2DB7.js +2 -0
- package/dist/cli-bundle/chunks/chunk-TGMONGWX.js +2 -0
- package/dist/cli-bundle/chunks/chunk-UZ7BIUCI.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-GZMWISWW.js → chunk-VZ63DEVJ.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-WFZ4UEOB.js +2 -0
- package/dist/cli-bundle/chunks/chunk-YVBRASXO.js +8 -0
- package/dist/cli-bundle/chunks/{chunk-SMKHR6BM.js → chunk-Z66DWDAU.js} +87 -87
- package/dist/cli-bundle/chunks/{register-list-query-QBGXO5JJ.js → register-list-query-75QXHIFH.js} +11 -11
- package/dist/cli-bundle/chunks/register-mutation-YS54SCHG.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-6KHZQSYJ.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-RTATEN2M.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-Q6DJ5DFQ.js → chunk-2CVX3KR3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5C3IDDW7.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-467EW5RL.js → chunk-ABV67XCC.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-B5RSLVE6.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-C224METM.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-CLDPTMQY.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-DDRN42PB.js +8 -0
- package/dist/cli-bundle/focused-chunks/{chunk-7O4NUJVO.js → chunk-DOVTUKJQ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-ECBOPEJE.js +75 -0
- package/dist/cli-bundle/focused-chunks/chunk-GITOYRUW.js +165 -0
- package/dist/cli-bundle/focused-chunks/chunk-GUIF3WVC.js +30 -0
- package/dist/cli-bundle/focused-chunks/chunk-LE4JUCRR.js +3 -0
- package/dist/cli-bundle/focused-chunks/{chunk-HFAW3FJQ.js → chunk-PSXFFQFT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RHIH6XIW.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-UDYRVBOZ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-XV5RV4ZT.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-JCVMOSWQ.js → chunk-YMU42COG.js} +2 -2
- package/dist/cli-bundle/main.js +27 -27
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +32 -32
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +55 -55
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +10 -10
- package/dist/cli.js +1 -1
- package/dist/core/checkpoint/checkpoint-gc.js +1 -1
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -2
- package/dist/core/config/nested-settings.js +1 -1
- package/dist/core/config/positional-value.js +1 -1
- package/dist/core/diagnostics/remediation.js +1 -1
- package/dist/core/extensions/activation-summary-markdown.js +2 -1
- package/dist/core/extensions/activation-summary.js +1 -1
- package/dist/core/extensions/activation-transaction.js +1 -1
- package/dist/core/extensions/capability-usage.js +1 -1
- package/dist/core/extensions/command-hook-context.js +1 -1
- package/dist/core/extensions/command-metadata-contract.js +1 -1
- package/dist/core/extensions/command-visibility-tier.js +1 -1
- package/dist/core/extensions/contribution-inventory.js +1 -1
- package/dist/core/extensions/exporter-output-contract.js +1 -1
- package/dist/core/extensions/extension-candidate.js +1 -1
- package/dist/core/extensions/extension-capability-aliases.js +1 -1
- package/dist/core/extensions/extension-hook-runtime.js +1 -1
- package/dist/core/extensions/extension-policy.js +1 -1
- package/dist/core/extensions/extension-registries.js +1 -1
- package/dist/core/extensions/extension-runtime-helpers.js +1 -1
- package/dist/core/extensions/extension-types.js +1 -1
- package/dist/core/extensions/flag-definition-validation.js +1 -1
- package/dist/core/extensions/flag-value-types.js +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/item-field-types.js +1 -1
- package/dist/core/extensions/item-fields.js +1 -1
- package/dist/core/extensions/loader.js +1 -1
- package/dist/core/extensions/manifest-parser.js +1 -1
- package/dist/core/extensions/manifest-schema.js +1 -1
- package/dist/core/extensions/module-graph-snapshot.js +1 -1
- package/dist/core/extensions/preflight-ownership.js +1 -1
- package/dist/core/extensions/registration-contracts.js +1 -1
- package/dist/core/extensions/registration-validation.js +1 -1
- package/dist/core/extensions/registration-values.js +1 -1
- package/dist/core/extensions/reserved-host-flags.js +1 -1
- package/dist/core/extensions/runtime-registrations.js +1 -1
- package/dist/core/extensions/service-ownership.js +1 -1
- package/dist/core/extensions/version-compat.js +1 -1
- package/dist/core/fs/atomic-create.js +1 -1
- package/dist/core/fs/fs-utils.js +2 -2
- package/dist/core/fs/host-environment-errors.js +1 -1
- package/dist/core/fs/index.js +1 -1
- package/dist/core/fs/path-utils.js +1 -1
- package/dist/core/governance/content-fields.js +1 -1
- package/dist/core/governance/issue-codes.js +1 -1
- package/dist/core/governance/metadata-coverage.js +1 -1
- package/dist/core/history/digest.js +1 -1
- package/dist/core/history/drift-cache.js +3 -3
- package/dist/core/history/drift-scan.d.ts +4 -0
- package/dist/core/history/drift-scan.js +1 -1
- package/dist/core/history/event-classification.js +1 -1
- package/dist/core/history/event-index.js +8 -7
- package/dist/core/history/history-compact-bulk.js +1 -1
- package/dist/core/history/history-diff.js +1 -1
- package/dist/core/history/history-rewrite.js +1 -1
- package/dist/core/history/history-storage-stats.js +1 -1
- package/dist/core/history/history-stream-policy.js +1 -1
- package/dist/core/history/history.js +2 -2
- package/dist/core/history/identity.js +1 -1
- package/dist/core/history/index.js +1 -1
- package/dist/core/history/operation-contract.js +1 -1
- package/dist/core/history/projection.js +1 -1
- package/dist/core/history/read.js +1 -1
- package/dist/core/history/replay.js +2 -1
- package/dist/core/history/tombstone.js +1 -1
- package/dist/core/history/version-address.js +1 -1
- package/dist/core/history/workspace-history.js +2 -2
- package/dist/core/io/body-file.js +1 -1
- package/dist/core/io/bulk-ids-input.js +2 -1
- package/dist/core/item/actionability.js +1 -1
- package/dist/core/item/dependency-reference.js +1 -1
- package/dist/core/item/id.js +1 -1
- package/dist/core/item/index.js +1 -1
- package/dist/core/item/item-format-version.js +1 -1
- package/dist/core/item/item-format.js +6 -4
- package/dist/core/item/item-record.js +1 -1
- package/dist/core/item/item-type-definition.js +1 -1
- package/dist/core/item/parent-reference-policy.js +1 -1
- package/dist/core/item/parse.js +8 -2
- package/dist/core/item/plan-lifecycle.js +1 -1
- package/dist/core/item/priority.js +1 -1
- package/dist/core/item/sprint-release-format.js +1 -1
- package/dist/core/item/status-filter.js +1 -1
- package/dist/core/item/status.js +1 -1
- package/dist/core/item/toon-decode.js +1 -1
- package/dist/core/item/type-registry.js +1 -1
- package/dist/core/item/type-synonyms.js +1 -1
- package/dist/core/lock/index.js +1 -1
- package/dist/core/lock/lock-gc.js +1 -1
- package/dist/core/lock/lock.js +3 -3
- package/dist/core/output/mutation-projection.js +1 -1
- package/dist/core/output/output-control.js +1 -1
- package/dist/core/output/output.js +22 -10
- package/dist/core/output/query-summary.js +1 -1
- package/dist/core/output/tabular.js +3 -1
- package/dist/core/packages/manifest.js +1 -1
- package/dist/core/packages/root.js +1 -1
- package/dist/core/policy/workflow-policy-schema.js +1 -1
- package/dist/core/policy/workflow-policy-store.js +1 -1
- package/dist/core/policy/workflow-policy.js +1 -1
- package/dist/core/profile/profile-describe.js +1 -1
- package/dist/core/profile/profile-lint.js +1 -1
- package/dist/core/profile/profile-plan.js +1 -1
- package/dist/core/profile/profile-presets.js +25 -1
- package/dist/core/reproducibility/context.js +1 -1
- package/dist/core/schema/fields-file.js +2 -2
- package/dist/core/schema/item-types-file.js +2 -2
- package/dist/core/schema/runtime-field-filters.js +1 -1
- package/dist/core/schema/runtime-field-values.js +1 -1
- package/dist/core/schema/runtime-schema.js +2 -2
- package/dist/core/schema/status-defs-file.js +2 -2
- package/dist/core/schema/status-token.js +1 -1
- package/dist/core/schema/type-inference.js +1 -1
- package/dist/core/schema/type-presets.js +1 -1
- package/dist/core/schema/type-workflows.js +1 -1
- package/dist/core/search/background-refresh.js +2 -2
- package/dist/core/search/bm25.js +1 -1
- package/dist/core/search/cache.js +2 -2
- package/dist/core/search/corpus.js +1 -1
- package/dist/core/search/embedding-batches.js +1 -1
- package/dist/core/search/eval-thresholds.js +1 -1
- package/dist/core/search/eval.js +1 -1
- package/dist/core/search/http-client.js +1 -1
- package/dist/core/search/providers.js +1 -1
- package/dist/core/search/relevance.js +1 -1
- package/dist/core/search/semantic-defaults.js +1 -1
- package/dist/core/search/staleness.js +1 -1
- package/dist/core/search/vector-stores.js +2 -2
- package/dist/core/search/vectorization-metadata.js +1 -1
- package/dist/core/sentry/helpers.js +1 -1
- package/dist/core/sentry/instrument.js +1 -1
- package/dist/core/session/session-state.js +1 -1
- package/dist/core/shared/agent-session-context.js +1 -1
- package/dist/core/shared/author.js +5 -1
- package/dist/core/shared/command-line.js +1 -1
- package/dist/core/shared/command-types.js +1 -1
- package/dist/core/shared/conflict-markers.js +1 -1
- package/dist/core/shared/constants.js +1 -1
- package/dist/core/shared/errors.js +1 -1
- package/dist/core/shared/html-entity-decode.js +1 -1
- package/dist/core/shared/index.js +1 -1
- package/dist/core/shared/item-metadata-contract.js +1 -1
- package/dist/core/shared/lazy-module.js +1 -1
- package/dist/core/shared/levenshtein.js +1 -1
- package/dist/core/shared/memo.js +1 -1
- package/dist/core/shared/numeric-parsers.js +1 -1
- package/dist/core/shared/option-alias-visibility.js +1 -1
- package/dist/core/shared/primitives.js +1 -1
- package/dist/core/shared/secret-rules.js +1 -1
- package/dist/core/shared/serial-queue.js +1 -1
- package/dist/core/shared/serialization.js +1 -1
- package/dist/core/shared/split-comma-list.js +1 -1
- package/dist/core/shared/text-normalization.js +1 -1
- package/dist/core/shared/time.js +2 -1
- package/dist/core/store/index.js +1 -1
- package/dist/core/store/item-format-migration.js +1 -1
- package/dist/core/store/item-metadata-cache.js +1 -1
- package/dist/core/store/item-metadata-query-index.js +7 -7
- package/dist/core/store/item-metadata-read-work.js +1 -1
- package/dist/core/store/item-store.js +1 -1
- package/dist/core/store/paths.js +1 -1
- package/dist/core/store/settings-concurrency.js +1 -1
- package/dist/core/store/settings-read-cache.js +1 -1
- package/dist/core/store/settings-validator.js +1 -1
- package/dist/core/store/settings.js +3 -3
- package/dist/core/store/tracker-preflight.js +1 -1
- package/dist/core/telemetry/consent.js +2 -2
- package/dist/core/telemetry/observability.js +1 -1
- package/dist/core/telemetry/policy.js +1 -1
- package/dist/core/telemetry/read-sampling.js +2 -2
- package/dist/core/telemetry/runtime.js +9 -5
- package/dist/core/test/background-runs.js +3 -3
- package/dist/core/test/item-test-run-tracking.js +1 -1
- package/dist/core/test/run-selectors.js +1 -1
- package/dist/core/validate/estimate-defaults.js +1 -1
- package/dist/core/validate/fix-planning.js +1 -1
- package/dist/core/validate/linked-artifact-reference.js +1 -1
- package/dist/core/validate/missing-by-type.js +1 -1
- package/dist/core/validate/missing-link-owners.js +1 -1
- package/dist/core/validate/stale-file-classification.js +1 -1
- package/dist/mcp/http-server.js +6 -4
- package/dist/mcp/legacy-adapter.js +1 -1
- package/dist/mcp/runtime-capabilities.js +1 -1
- package/dist/mcp/server.js +4 -4
- package/dist/mcp/tool-definitions.js +1 -1
- package/dist/sdk/actionability.js +1 -1
- package/dist/sdk/agent/closed-domain-contracts.js +1 -1
- package/dist/sdk/agent/command-recovery.js +1 -1
- package/dist/sdk/agent/command-suggestions.js +1 -1
- package/dist/sdk/agent/create-option-policy.js +1 -1
- package/dist/sdk/agent/identity-config.js +1 -1
- package/dist/sdk/agent/item-addressing.js +1 -1
- package/dist/sdk/agent/refusal-closure-census.js +2 -1
- package/dist/sdk/agent/refusal-closure.js +1 -1
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -1
- package/dist/sdk/agent/refusal-reachability.js +3 -1
- package/dist/sdk/agent/subcommand-recovery.js +1 -1
- package/dist/sdk/agent/task-transcript-contracts.js +1 -1
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -1
- package/dist/sdk/agent-capability-contracts.js +3 -1
- package/dist/sdk/agent-session-context.js +1 -1
- package/dist/sdk/annotations.js +1 -1
- package/dist/sdk/author-attribution.js +1 -1
- package/dist/sdk/authoring.js +1 -1
- package/dist/sdk/cli-bootstrap.js +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +5 -3
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -1
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +1 -1
- package/dist/sdk/cli-contracts/completeness.js +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +2 -1
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -7
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -1
- package/dist/sdk/cli-contracts/string-lists.js +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -1
- package/dist/sdk/cli-contracts.js +1 -1
- package/dist/sdk/cli-program.js +1 -1
- package/dist/sdk/command-line.js +1 -1
- package/dist/sdk/comments.js +1 -1
- package/dist/sdk/compile-cache.js +1 -1
- package/dist/sdk/completion/bash.js +2 -1
- package/dist/sdk/completion/fish.js +13 -7
- package/dist/sdk/completion/shared.js +1 -1
- package/dist/sdk/completion/zsh.js +14 -8
- package/dist/sdk/completion.js +1 -1
- package/dist/sdk/compose.js +1 -1
- package/dist/sdk/config.js +1 -1
- package/dist/sdk/context/recency.js +1 -1
- package/dist/sdk/context/semantic-session-attribution.js +1 -1
- package/dist/sdk/context/usage-egress.js +1 -1
- package/dist/sdk/context/usage-ledger.js +6 -3
- package/dist/sdk/context-intent-contracts.js +1 -1
- package/dist/sdk/context-intent-runtime.js +1 -1
- package/dist/sdk/context-packing.js +1 -1
- package/dist/sdk/context-relevance.js +1 -1
- package/dist/sdk/context-signal-store.js +2 -2
- package/dist/sdk/context-usage.js +1 -1
- package/dist/sdk/contracts.js +1 -1
- package/dist/sdk/core-governance.js +1 -1
- package/dist/sdk/core.js +1 -1
- package/dist/sdk/corpus-shape.js +1 -1
- package/dist/sdk/define.js +1 -1
- package/dist/sdk/dependencies.js +1 -1
- package/dist/sdk/dependency-flag-validation.js +1 -1
- package/dist/sdk/dependency-provenance.js +1 -1
- package/dist/sdk/docs.js +1 -1
- package/dist/sdk/duplicates.js +1 -1
- package/dist/sdk/environment/agent-environment.js +1 -1
- package/dist/sdk/environment/host-environment-errors.js +1 -1
- package/dist/sdk/environment/project-runtime-compatibility.js +2 -1
- package/dist/sdk/environment/source-context.js +1 -1
- package/dist/sdk/environment/tracker-preflight.js +1 -1
- package/dist/sdk/error-code-catalog.js +1 -1
- package/dist/sdk/error-runtime.js +1 -1
- package/dist/sdk/errors.js +1 -1
- package/dist/sdk/eval.js +1 -1
- package/dist/sdk/extension/author-manifest.js +1 -1
- package/dist/sdk/extension/bundled-catalog.js +1 -1
- package/dist/sdk/extension/concurrency.js +1 -1
- package/dist/sdk/extension/copy-scope.js +1 -1
- package/dist/sdk/extension/custom-field-collisions.js +1 -1
- package/dist/sdk/extension/describe.js +4 -2
- package/dist/sdk/extension/doctor.js +1 -1
- package/dist/sdk/extension/install-plan.js +1 -1
- package/dist/sdk/extension/install-receipts.js +1 -1
- package/dist/sdk/extension/install-runtime.js +3 -3
- package/dist/sdk/extension/install-snapshot.js +1 -1
- package/dist/sdk/extension/install-sources.js +5 -5
- package/dist/sdk/extension/managed-state.js +2 -2
- package/dist/sdk/extension/migrations.js +2 -2
- package/dist/sdk/extension/output-ownership.js +1 -1
- package/dist/sdk/extension/runtime-summary.js +1 -1
- package/dist/sdk/extension/scaffold.js +11 -4
- package/dist/sdk/extension/shared.js +1 -1
- package/dist/sdk/extension/source-resolution.js +1 -1
- package/dist/sdk/extension/static-inventory.js +1 -1
- package/dist/sdk/extension/update-check.js +1 -1
- package/dist/sdk/extension-command-context.js +1 -1
- package/dist/sdk/extension-contracts.js +1 -1
- package/dist/sdk/extension.js +1 -1
- package/dist/sdk/files.js +1 -1
- package/dist/sdk/flag-invocation-contracts.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/generated-error-code-catalog.js +1 -1
- package/dist/sdk/governance/assurance-action-contracts.js +1 -1
- package/dist/sdk/governance/assurance-action.js +1 -1
- package/dist/sdk/governance/assurance-limits.js +1 -1
- package/dist/sdk/governance/assurance-mutation-error.js +1 -1
- package/dist/sdk/governance/assurance-presets.js +1 -1
- package/dist/sdk/governance/assurance-runtime.js +1 -1
- package/dist/sdk/governance/assurance.js +4 -4
- package/dist/sdk/governance/boundary-fixtures.js +1 -1
- package/dist/sdk/governance/closure-timestamps.js +1 -1
- package/dist/sdk/governance/coverage-assurance.js +1 -1
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -1
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -1
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -1
- package/dist/sdk/governance/defect-recurrence.js +1 -1
- package/dist/sdk/governance/extension-host-version.js +1 -1
- package/dist/sdk/governance/gc.js +1 -1
- package/dist/sdk/governance/health-merge-evidence.js +1 -1
- package/dist/sdk/governance/health.js +2 -1
- package/dist/sdk/governance/hierarchy-validation.js +1 -1
- package/dist/sdk/governance/linked-file-report.js +1 -1
- package/dist/sdk/governance/merge-receipt-history.js +1 -1
- package/dist/sdk/governance/provenance-health.js +4 -1
- package/dist/sdk/governance/reindex.js +5 -4
- package/dist/sdk/governance/stale-work.js +1 -1
- package/dist/sdk/governance/status-role-diagnostics.js +1 -1
- package/dist/sdk/governance/storage-integrity.js +1 -1
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -1
- package/dist/sdk/governance/upgrade.js +2 -2
- package/dist/sdk/governance/validate-history-drift.js +1 -1
- package/dist/sdk/governance/validate-item-reader.js +1 -1
- package/dist/sdk/governance/validate-normalization.js +1 -1
- package/dist/sdk/governance/validate.js +1 -1
- package/dist/sdk/governance/workflow-completeness.js +1 -1
- package/dist/sdk/governance/workflow-policy.js +3 -3
- package/dist/sdk/governance/workspace-position.js +2 -1
- package/dist/sdk/governance.js +1 -1
- package/dist/sdk/graph/adapter.js +1 -1
- package/dist/sdk/graph/analytics.js +1 -1
- package/dist/sdk/graph/assembly.js +1 -1
- package/dist/sdk/graph/cache.js +1 -1
- package/dist/sdk/graph/centrality.js +1 -1
- package/dist/sdk/graph/conformance.js +1 -1
- package/dist/sdk/graph/deadline-scheduling.js +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -1
- package/dist/sdk/graph/governance-contracts.js +1 -1
- package/dist/sdk/graph/governance.js +1 -1
- package/dist/sdk/graph/hierarchy-integrity.js +1 -1
- package/dist/sdk/graph/index.js +1 -1
- package/dist/sdk/graph/lifecycle-coverage.js +1 -1
- package/dist/sdk/graph/mutation-advisory.js +1 -1
- package/dist/sdk/graph/query-contracts.js +1 -1
- package/dist/sdk/graph/remediation.js +1 -1
- package/dist/sdk/graph/run.js +1 -1
- package/dist/sdk/graph/scheduling.js +1 -1
- package/dist/sdk/graph/traversal.js +1 -1
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -1
- package/dist/sdk/graph.js +1 -1
- package/dist/sdk/guide-topics.js +1 -1
- package/dist/sdk/guide.js +8 -1
- package/dist/sdk/history/attestation-command.js +1 -1
- package/dist/sdk/history/attestation-contract.js +1 -1
- package/dist/sdk/history/attestation-scan.js +1 -1
- package/dist/sdk/history/attestation.js +1 -1
- package/dist/sdk/history/maintenance.js +1 -1
- package/dist/sdk/history/salvage.js +3 -2
- package/dist/sdk/history/subject.js +1 -1
- package/dist/sdk/history-analytics.js +1 -1
- package/dist/sdk/history-compact.js +1 -1
- package/dist/sdk/history-mcp.js +1 -1
- package/dist/sdk/history-provenance.js +1 -1
- package/dist/sdk/history-read.js +1 -1
- package/dist/sdk/history-redact.js +1 -1
- package/dist/sdk/history-repair.js +1 -1
- package/dist/sdk/improvement-ledger-validation.js +1 -1
- package/dist/sdk/improvement-ledger.js +2 -2
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/init-agent-guidance.js +16 -2
- package/dist/sdk/init.js +16 -2
- package/dist/sdk/invocation-author.js +1 -1
- package/dist/sdk/item-children.js +1 -1
- package/dist/sdk/item-metadata-index.js +1 -1
- package/dist/sdk/item-schedule.js +1 -1
- package/dist/sdk/item-transaction.js +1 -1
- package/dist/sdk/learnings.js +1 -1
- package/dist/sdk/lifecycle/append.js +4 -2
- package/dist/sdk/lifecycle/claim.js +1 -1
- package/dist/sdk/lifecycle/close-many.js +1 -1
- package/dist/sdk/lifecycle/close.js +1 -1
- package/dist/sdk/lifecycle/copy.js +1 -1
- package/dist/sdk/lifecycle/create.js +1 -1
- package/dist/sdk/lifecycle/delete.js +1 -1
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -1
- package/dist/sdk/lifecycle/focus.js +1 -1
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -1
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -1
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -1
- package/dist/sdk/lifecycle/mcp-actions.js +1 -1
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -1
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -1
- package/dist/sdk/lifecycle/plan-mutation-receipt.js +1 -1
- package/dist/sdk/lifecycle/plan.js +1 -1
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -1
- package/dist/sdk/lifecycle/reopen.js +1 -1
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +2 -1
- package/dist/sdk/lifecycle/restore.js +1 -1
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
- package/dist/sdk/lifecycle/task-composition.js +1 -1
- package/dist/sdk/lifecycle/update-many.js +1 -1
- package/dist/sdk/lifecycle/update.js +2 -1
- package/dist/sdk/lifecycle-completion.js +1 -1
- package/dist/sdk/lifecycle-policy.js +1 -1
- package/dist/sdk/linked-artifacts.js +2 -1
- package/dist/sdk/mcp/apps.js +1 -1
- package/dist/sdk/mcp/authorization.js +1 -1
- package/dist/sdk/mcp/discovery.js +1 -1
- package/dist/sdk/mcp/interactions.js +1 -1
- package/dist/sdk/mcp/protocol.js +1 -1
- package/dist/sdk/mcp/skills.js +3 -1
- package/dist/sdk/mcp/subscriptions.js +1 -1
- package/dist/sdk/mcp/tasks.js +2 -2
- package/dist/sdk/mcp/transport.js +1 -1
- package/dist/sdk/merge/abandoned-receipts.js +1 -1
- package/dist/sdk/merge/driver.js +1 -1
- package/dist/sdk/merge/index.js +1 -1
- package/dist/sdk/merge/install.js +4 -2
- package/dist/sdk/merge/receipt-file-boundary.js +1 -1
- package/dist/sdk/merge/receipt-operation.js +1 -1
- package/dist/sdk/merge/receipt-schema.js +1 -1
- package/dist/sdk/merge/receipts.js +4 -4
- package/dist/sdk/merge/reconcile.js +1 -1
- package/dist/sdk/merge/three-way.js +3 -2
- package/dist/sdk/merge/worktree-config.js +1 -1
- package/dist/sdk/merge.js +1 -1
- package/dist/sdk/mutation-events.js +1 -1
- package/dist/sdk/mutation-guard.js +1 -1
- package/dist/sdk/notes.js +1 -1
- package/dist/sdk/output-contracts.js +1 -1
- package/dist/sdk/output-projection.js +1 -1
- package/dist/sdk/output-token-accounting.js +1 -1
- package/dist/sdk/output.js +2 -1
- package/dist/sdk/ownership-source.js +1 -1
- package/dist/sdk/package-import-adapters.js +1 -1
- package/dist/sdk/package-migrations.js +1 -1
- package/dist/sdk/package-runtime-options.js +1 -1
- package/dist/sdk/pagination.js +1 -1
- package/dist/sdk/profile.js +5 -1
- package/dist/sdk/provenance.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -1
- package/dist/sdk/query/aggregate.js +1 -1
- package/dist/sdk/query/calendar.js +4 -1
- package/dist/sdk/query/complete-list.js +1 -1
- package/dist/sdk/query/context.js +2 -1
- package/dist/sdk/query/duplicate-candidates.js +1 -1
- package/dist/sdk/query/get.d.ts +14 -2
- package/dist/sdk/query/get.js +1 -1
- package/dist/sdk/query/history.js +1 -1
- package/dist/sdk/query/item-filter-options.js +1 -1
- package/dist/sdk/query/light-metadata.js +1 -1
- package/dist/sdk/query/list-filter-shared.js +1 -1
- package/dist/sdk/query/list.js +1 -1
- package/dist/sdk/query/multi-value-filters.js +1 -1
- package/dist/sdk/query/next-ready-budget.js +1 -1
- package/dist/sdk/query/next.js +2 -1
- package/dist/sdk/query/parsers.js +1 -1
- package/dist/sdk/query/projection-contracts.js +1 -1
- package/dist/sdk/query/search/corpus.js +2 -1
- package/dist/sdk/query/search/filters.js +1 -1
- package/dist/sdk/query/search/input.js +1 -1
- package/dist/sdk/query/search/lexical.js +1 -1
- package/dist/sdk/query/search/response.js +1 -1
- package/dist/sdk/query/search/semantic.js +3 -2
- package/dist/sdk/query/search/types.js +1 -1
- package/dist/sdk/query/search-contracts.js +1 -1
- package/dist/sdk/query/search-pagination.js +1 -1
- package/dist/sdk/query/search-rendering.js +1 -1
- package/dist/sdk/query/search.js +1 -1
- package/dist/sdk/query/workspace-contracts.js +1 -1
- package/dist/sdk/query.js +1 -1
- package/dist/sdk/read-output/continuation.js +1 -1
- package/dist/sdk/read-output/options.js +1 -1
- package/dist/sdk/read-output/provenance.js +1 -1
- package/dist/sdk/read-output-budget.js +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/read-output-rows.js +1 -1
- package/dist/sdk/read-output-session.js +1 -1
- package/dist/sdk/relationship-analytics.js +1 -1
- package/dist/sdk/relationship-context.js +1 -1
- package/dist/sdk/relationship-history.js +7 -4
- package/dist/sdk/relationship-kinds/contract.js +1 -1
- package/dist/sdk/relationship-migration.js +1 -1
- package/dist/sdk/relationships.js +1 -1
- package/dist/sdk/reproducibility/process.js +1 -1
- package/dist/sdk/runtime/actions.js +1 -1
- package/dist/sdk/runtime/context.js +1 -1
- package/dist/sdk/runtime/schema-preview.js +1 -1
- package/dist/sdk/runtime/schema.js +1 -1
- package/dist/sdk/runtime-action-aliases.js +1 -1
- package/dist/sdk/runtime-extended-actions.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime-primitives.js +1 -1
- package/dist/sdk/runtime-public-contracts.js +1 -1
- package/dist/sdk/runtime-stats-options.js +1 -1
- package/dist/sdk/runtime.js +1 -1
- package/dist/sdk/scheduling-shortcuts.js +1 -1
- package/dist/sdk/schema-migration.js +4 -3
- package/dist/sdk/schema.js +7 -1
- package/dist/sdk/search-refresh-worker.js +1 -1
- package/dist/sdk/similarity-scoring.js +1 -1
- package/dist/sdk/similarity.js +1 -1
- package/dist/sdk/start-task-status.js +1 -1
- package/dist/sdk/stats.js +1 -1
- package/dist/sdk/structured-mutations.js +1 -1
- package/dist/sdk/telemetry-flush.js +1 -1
- package/dist/sdk/telemetry.js +4 -3
- package/dist/sdk/templates.js +26 -2
- package/dist/sdk/test/batch.js +2 -2
- package/dist/sdk/test/entry.js +1 -1
- package/dist/sdk/test/execution.js +6 -5
- package/dist/sdk/test/json-path.js +1 -1
- package/dist/sdk/test/linked-command-detection.js +1 -1
- package/dist/sdk/test/measurements.js +1 -1
- package/dist/sdk/test/parsers.js +1 -1
- package/dist/sdk/test/runs.js +1 -1
- package/dist/sdk/test/trust.js +2 -2
- package/dist/sdk/test/workspace-snapshot.js +1 -1
- package/dist/sdk/testing.js +7 -4
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -1
- package/dist/sdk/traceability/source-traceability.js +2 -1
- package/dist/sdk/tracker-root-discovery.js +1 -1
- package/dist/sdk/workspace-contracts-cache.js +1 -1
- package/dist/sdk/workspace-contracts.js +1 -1
- package/dist/sdk/workspace-memory.js +2 -2
- package/dist/sdk/workspace-recipe.js +1 -1
- package/dist/sdk/workspace-snapshot.js +5 -4
- package/dist/sdk/workspace-transaction-gc.js +1 -1
- package/dist/sdk/workspace-transaction.js +2 -2
- package/dist/sdk/workspace.js +3 -2
- package/dist/types/index.js +1 -1
- package/dist/types.js +1 -1
- package/docs/AGENT_EVIDENCE_CONSISTENCY.md +88 -0
- package/docs/GET_READ_EVIDENCE.md +68 -0
- package/docs/README.md +2 -0
- package/marketplace.json +2 -2
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/extensions/vcs/index.ts +4 -2
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/package.json +2 -2
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +2 -2
- package/plugins/pm-codex/plugin.json +1 -1
- package/scripts/finalize-build.mjs +3 -2
- package/dist/cli-bundle/chunks/chunk-7UVXKI7K.js +0 -2
- package/dist/cli-bundle/chunks/chunk-D7Z2ZMJL.js +0 -3
- package/dist/cli-bundle/chunks/chunk-DEZPZOQ7.js +0 -2
- package/dist/cli-bundle/chunks/chunk-J52QIRRZ.js +0 -80
- package/dist/cli-bundle/chunks/chunk-JDKD3WGG.js +0 -6
- package/dist/cli-bundle/chunks/chunk-JQ7DW663.js +0 -2
- package/dist/cli-bundle/chunks/chunk-QXIDOOWT.js +0 -20
- package/dist/cli-bundle/chunks/chunk-SGFQQXFD.js +0 -2
- package/dist/cli-bundle/chunks/chunk-V3U77H3V.js +0 -31
- package/dist/cli-bundle/chunks/chunk-XZDWAYJC.js +0 -3
- package/dist/cli-bundle/chunks/chunk-Y6VRBTP3.js +0 -238
- package/dist/cli-bundle/chunks/chunk-YAAFYFS4.js +0 -8
- package/dist/cli-bundle/chunks/register-mutation-53ZLT4RX.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-OBK2FXUU.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-HM3OCBH2.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-2JFYR56O.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-32EVUSS4.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-5GUSO2P4.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-6XBRADQQ.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-CURTIIQT.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-IJUWEEEB.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-JMJK2L4Z.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-KG3H4UZZ.js +0 -30
- package/dist/cli-bundle/focused-chunks/chunk-MHQ2XICU.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-RJV6QVJE.js +0 -75
- package/dist/cli-bundle/focused-chunks/chunk-ZE2JZ7R6.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-ZLEN4HZD.js +0 -165
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!(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]="ad3f992c-db2e-5276-a8ae-5d5d4ec8ae68")}catch(e2){}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{enforceWorkflowMutation}from"../../core/policy/workflow-policy-store.js";import{assertNoAmbiguousBareCommaEntry,looksLikeStructuredKeyValueEntry,resolveMutationStdinTokenFields}from"../../core/item/parse.js";import{removeFileIfExists,writeFileAtomic,appendHistoryEntry,createHistoryEntry,generateItemId,normalizeItemId,canonicalDocument,normalizeItemMetadata,serializeItemDocument,assertParentReferenceIsNotSelf,isPlaceholderReferenceToken,normalizeParentReferenceValue,validateMissingParentReference,validateSprintOrReleaseValue,assertNoUnknownCsvKeys,looksLikeGenericKeyValueEntry,mergeAdditiveTags,parseCsvKv,parseOptionalNonNegativeInteger,parseOptionalNumber,parseTags,shouldResolveMutationStdinTokens,transferMutationStdinTokenPolicy,resolvePriority,getFocusedItem,normalizeStatusInput,isTerminalStatus,canonicalizeCommandOptionKey,commandOptionFlagLabel,resolveItemTypeRegistry,resolveCommandOptionPolicyState,resolveTypeDefinition,resolveTypeName,validateTypeOptions,acquireLock,printError,buildInvalidTypeError,resolveTypeSynonym,collectRuntimeCreateFieldValues,resolveItemTypesFilePath,resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry,EXIT_CODE,ITEM_METADATA_KEY_ORDER,PmCliError,nowIso,resolveIsoOrRelative,getActiveExtensionRegistrations,projectAfterCommandItemSnapshot,recordAfterCommandAffectedItem,runActiveCommandHandler,runActiveBeforeMutationHooks,runActiveOnWriteHooks,collectRegisteredItemFieldNames,applyRegisteredItemFieldDefaultsAndValidation,parseRegisteredItemFieldAssignments,listAllItemMetadataLight,locateItem,createMutationGuardSdk,getHistoryPath,getItemPath,resolvePmRoot,readSettings,resolveAuthor}from"../runtime-primitives.js";import{requireTerminalReasonWithRecovery}from"../lifecycle-policy.js";import{evaluateSimilarityGovernance,similarityAdvisoryWarnings}from"../similarity.js";import{acquireItemMetadataDerivedIndexLock,refreshItemMetadataDerivedIndex}from"../item-metadata-index.js";import{collectNewOrderingCycleWarnings}from"../graph/mutation-advisory.js";import{assertHierarchyMutationAllowed}from"../graph/hierarchy-integrity.js";import{resolveWorkspaceRelationshipKindRegistry}from"../graph/assembly.js";import{acquireHierarchyMutationLock}from"./hierarchy-mutation-lock.js";import{normalizeRiskInput,normalizeSeverityInput,parseConfidenceInput,parseRegressionInput}from"./metadata-normalizers.js";import{applyLegacyNoneCollectionNormalizers,createLegacyNoneCollectionNormalizers,assertNoLegacyNoneToken,assertNoLegacyNoneTokens,isLegacyNoneToken}from"./legacy-none-tokens.js";import{suggestNextLifecycleTransition}from"./lifecycle-transitions.js";import{parseLinkedTestAssertionEqualsMap,parseLinkedTestAssertionGteMap,parseLinkedTestBoolean,parseLinkedTestContextMode,parseLinkedTestEnvClear,parseLinkedTestEnvSet,parseLinkedTestMinLines,parseLinkedTestRegexList,parseLinkedTestStringList,parseLinkedTestWorkspaceContextMode}from"../test/parsers.js";import{STRUCTURED_LINKED_TEST_KEYS,normalizeStructuredLinkedTestEntry}from"../test/entry.js";import{attachLinkedTestMutationProvenance}from"../test/trust.js";import{COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR,COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR,parseCommandUnsetTargets,resolveRuntimeUnsetFieldDefinition}from"./shared-unset-fields.js";import{ensureEnumValue}from"./recurrence-parsers.js";import{assertDependencyEdgesAllowed,assertDependencyTargetsResolvable,assertValidBareDependencyFlagValue}from"../dependency-flag-validation.js";import{normalizeDependencySeedId,normalizeItemReference,isExternalDependencyReference,normalizeDependencySourceKind}from"../dependency-provenance.js";import{resolveCanonicalRelationshipKind}from"../relationships.js";import{supportsCreateExplicitEmpty}from"../agent/create-option-policy.js";import{parseEventEntries,parseReminderEntries,parseTypeOptionEntries}from"./repeatable-metadata-parsers.js";import{DEPENDENCY_KIND_VALUES,ISSUE_SEVERITY_VALUES,RISK_VALUES,SCOPE_VALUES}from"../../types/index.js";const CREATE_MODE_VALUES=["strict","progressive"];const SCHEDULE_CREATE_PRESET_VALUES=["lightweight"];const SCHEDULE_CREATE_PRESET_TYPES=new Set(["Reminder","Meeting","Event"]);const LOG_SEED_ALLOWED_KEYS=new Set(["author","created_at","text"]);const CREATE_UNSET_FIELD_DEFINITIONS=[...COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR,{canonical:"author",aliases:["author"],optionKey:"author",metadataKey:"author"},...COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR];const CREATE_UNSET_ALIAS_MAP=(()=>{const map=new Map;for(const definition of CREATE_UNSET_FIELD_DEFINITIONS){for(const alias of definition.aliases){map.set(alias,{optionKey:definition.optionKey,metadataKey:definition.metadataKey})}}return map})();const CREATE_OPTION_KEY_TO_UNSET_CANONICAL=new Map(CREATE_UNSET_FIELD_DEFINITIONS.map(definition=>[definition.optionKey,definition.canonical]));const CREATE_UNSET_SUPPORTED_CANONICAL_FIELDS=CREATE_UNSET_FIELD_DEFINITIONS.map(definition=>definition.canonical).sort((left,right)=>left.localeCompare(right)).join(", ");function buildInvalidLogSeedKeysMessage(optionName,unsupportedKeys){const sortedUnsupported=[...unsupportedKeys].sort((left,right)=>left.localeCompare(right));const keyLabel=sortedUnsupported.length===1?"key":"keys";return`${optionName} supports only author, created_at, and text seed fields. Found unsupported ${keyLabel}: ${sortedUnsupported.join(", ")}. If text contains comma-separated key:value-like fragments, wrap text in quotes (for example text="first,scope:project"), use markdown-style key/value input, or pass ${optionName} - with piped stdin.`}function parseStatusValue(value,statusRegistry){const normalized=normalizeStatusInput(value,statusRegistry);if(!normalized){const allowedStatuses=statusRegistry.definitions.map(definition=>definition.id);throw new PmCliError(`Invalid status value "${value}". Allowed: ${allowedStatuses.join(", ")}`,EXIT_CODE.USAGE)}return normalized}function resolveCreateDefaultStatus(typeDefinition,statusRegistry){const configured=typeDefinition.default_status;if(configured!==void 0){const normalized=normalizeStatusInput(configured,statusRegistry);if(normalized){return normalized}}return statusRegistry.open_status}function parseCreatedAt(value,currentIso){if(!value||value.trim()===""||value.trim().toLowerCase()==="now"){return currentIso}const parsed=Date.parse(value);if(!Number.isFinite(parsed)){throw new PmCliError(`Invalid created_at timestamp "${value}"`,EXIT_CODE.USAGE)}return new Date(parsed).toISOString()}const CREATE_LEGACY_NONE_COLLECTION_NORMALIZERS=createLegacyNoneCollectionNormalizers();function normalizeLegacyNoneCreateOptions(options){const normalized={...options,unset:options.unset?[...options.unset]:void 0};const appendUnsetTarget=value=>{const current=normalized.unset?[...normalized.unset]:[];if(!current.includes(value)){current.push(value)}normalized.unset=current};if(isLegacyNoneToken(normalized.template)){normalized.template=void 0}const scalarOptionKeys=new Set([...CREATE_OPTION_KEY_TO_UNSET_CANONICAL.keys(),"rank"]);for(const optionKey of scalarOptionKeys){const candidate=normalized[optionKey];if(typeof candidate!=="string"||!isLegacyNoneToken(candidate)){continue}const canonicalUnset=optionKey==="rank"?"order":CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey)??optionKey;appendUnsetTarget(canonicalUnset);normalized[optionKey]=void 0}return transferMutationStdinTokenPolicy(options,applyLegacyNoneCollectionNormalizers(normalized,CREATE_LEGACY_NONE_COLLECTION_NORMALIZERS))}function parseOptionalString(value){if(value===void 0)return void 0;return value}function parseCreateUnsetTargets(raw,runtimeFieldRegistry){return parseCommandUnsetTargets({raw,supportedFields:CREATE_UNSET_SUPPORTED_CANONICAL_FIELDS,resolveDefinition:trimmed=>CREATE_UNSET_ALIAS_MAP.get(trimmed)??resolveRuntimeUnsetFieldDefinition(trimmed,"create",runtimeFieldRegistry)})}const DEP_SEED_KEYS=["id","kind","type","author","created_at","source_kind"];const LINKED_ARTIFACT_SEED_KEYS=["path","scope","note"];function parseDependencies(raw,nowValue,prefix,fallbackAuthor){if(!raw||raw.length===0)return{values:void 0,explicitEmpty:false};assertNoLegacyNoneTokens(raw,"--dep","Use --clear-deps to clear dependencies.");const values=raw.map(entry=>{const trimmedEntry=entry.trim();const isStructured=looksLikeStructuredEntry(trimmedEntry,DEP_SEED_KEYS);assertValidBareDependencyFlagValue(trimmedEntry,isStructured);const kv=isStructured?parseCsvKv(entry,"--dep"):{id:trimmedEntry,kind:"related"};if(isStructured){assertNoUnknownCsvKeys(kv,"--dep",DEP_SEED_KEYS)}const id=parseOptionalString(kv.id);const kind=normalizeDependencyKindInput(parseOptionalString(kv.kind??kv.type));if(!id||!kind){throw new PmCliError("--dep requires id and kind, or a bare item id to create a related dependency",EXIT_CODE.USAGE)}if(id.trim().toLowerCase()==="undefined"){throw new PmCliError(`--dep id must not use placeholder token "${id}". Use --clear-deps to clear dependencies.`,EXIT_CODE.USAGE)}const sourceKind=normalizeDependencySourceKind(parseOptionalString(kv.source_kind));const explicitAuthor=parseOptionalString(kv.author);return{id:normalizeDependencySeedId(id,prefix,sourceKind),kind:ensureEnumValue(kind,DEPENDENCY_KIND_VALUES,"dependency kind","kind"),created_at:parseCreatedAt(kv.created_at,nowValue),author:explicitAuthor??fallbackAuthor,source_kind:sourceKind??"cli:create:dep",author_source:explicitAuthor?"asserted":"detected"}});return{values,explicitEmpty:false}}function normalizeDependencyKindInput(raw){return typeof raw==="string"?resolveCanonicalRelationshipKind(raw)??raw.trim():raw}function looksLikeStructuredEntry(raw,keys){if(looksLikeStructuredKeyValueEntry(raw,keys)){return true}return looksLikeGenericKeyValueEntry(raw)}function parseLogSeed(optionName,raw,nowValue,fallbackAuthor){if(!raw||raw.length===0)return{values:void 0,explicitEmpty:false};const clearHint=optionName==="--comment"?"Use --clear-comments to clear comments.":optionName==="--note"?"Use --clear-notes to clear notes.":"Use --clear-learnings to clear learnings.";assertNoLegacyNoneTokens(raw,optionName,clearHint);const values=raw.map(entry=>{const trimmedEntry=entry.trim();const buildPlainTextCommentSeed=()=>{if(trimmedEntry.length===0){throw new PmCliError(`${optionName} requires text=<value>`,EXIT_CODE.USAGE)}return{created_at:nowValue,author:fallbackAuthor,text:trimmedEntry}};let kv;try{kv=parseCsvKv(entry,optionName)}catch(error){if(optionName==="--comment"||optionName==="--note"||optionName==="--learning"){return buildPlainTextCommentSeed()}throw error}const unsupportedKeys=Object.keys(kv).filter(key=>!LOG_SEED_ALLOWED_KEYS.has(key));if(unsupportedKeys.length>0){return{created_at:parseCreatedAt(kv.created_at,nowValue),author:parseOptionalString(kv.author)??fallbackAuthor,text:trimmedEntry}}const text=kv.text??"";if(text===""){throw new PmCliError(`${optionName} requires text=<value>`,EXIT_CODE.USAGE)}return{created_at:parseCreatedAt(kv.created_at,nowValue),author:parseOptionalString(kv.author)??fallbackAuthor,text}});return{values,explicitEmpty:false}}function parseFiles(raw){if(!raw||raw.length===0)return{values:void 0,explicitEmpty:false};assertNoLegacyNoneTokens(raw,"--file","Use --clear-files to clear linked files.");const values=raw.map(entry=>{const trimmedEntry=entry.trim();const isStructured=looksLikeStructuredEntry(trimmedEntry,LINKED_ARTIFACT_SEED_KEYS);assertNoAmbiguousBareCommaEntry(trimmedEntry,"--file","file path",isStructured);const kv=isStructured?parseCsvKv(entry,"--file"):{path:trimmedEntry};if(isStructured){assertNoUnknownCsvKeys(kv,"--file",LINKED_ARTIFACT_SEED_KEYS)}if(!kv.path){throw new PmCliError("--file requires path=<value> or a bare file path",EXIT_CODE.USAGE)}return{path:kv.path,scope:ensureEnumValue(kv.scope??"project",SCOPE_VALUES,"file scope"),note:parseOptionalString(kv.note)}});return{values,explicitEmpty:false}}function parseTests(raw){if(!raw||raw.length===0)return{values:void 0,explicitEmpty:false};assertNoLegacyNoneTokens(raw,"--test","Use --clear-tests to clear linked tests.");const values=raw.map(entry=>{const trimmedEntry=entry.trim();const isStructured=looksLikeStructuredEntry(trimmedEntry,STRUCTURED_LINKED_TEST_KEYS);assertNoAmbiguousBareCommaEntry(trimmedEntry,"--test","test command",isStructured);const kv=isStructured?normalizeStructuredLinkedTestEntry(parseCsvKv(entry,"--test"),"--test"):{command:trimmedEntry};const command=parseOptionalString(kv.command);const filePath=parseOptionalString(kv.path);if(!command){throw new PmCliError("--test requires command=<value> or a bare command (path=<value> is optional metadata)",EXIT_CODE.USAGE)}const timeoutSecondsRaw=parseOptionalString(kv.timeout_seconds);const timeoutAliasRaw=parseOptionalString(kv.timeout);if(timeoutSecondsRaw&&timeoutAliasRaw&&timeoutSecondsRaw!==timeoutAliasRaw){throw new PmCliError("--test timeout and timeout_seconds must match when both are provided",EXIT_CODE.USAGE)}const timeoutRaw=timeoutSecondsRaw??timeoutAliasRaw;return{command,path:filePath,scope:ensureEnumValue(kv.scope??"project",SCOPE_VALUES,"test scope"),timeout_seconds:timeoutRaw?parseOptionalNumber(timeoutRaw,"timeout_seconds"):void 0,pm_context_mode:parseLinkedTestContextMode(kv.pm_context_mode,"--test"),workspace_context_mode:parseLinkedTestWorkspaceContextMode(kv.workspace_context_mode,"--test"),env_set:parseLinkedTestEnvSet(kv.env_set,"--test"),env_clear:parseLinkedTestEnvClear(kv.env_clear,"--test"),shared_host_safe:parseLinkedTestBoolean(kv.shared_host_safe,"--test","shared_host_safe"),assert_stdout_contains:parseLinkedTestStringList(kv.assert_stdout_contains),assert_stdout_regex:parseLinkedTestRegexList(kv.assert_stdout_regex,"--test","assert_stdout_regex"),assert_stderr_contains:parseLinkedTestStringList(kv.assert_stderr_contains),assert_stderr_regex:parseLinkedTestRegexList(kv.assert_stderr_regex,"--test","assert_stderr_regex"),assert_stdout_min_lines:parseLinkedTestMinLines(kv.assert_stdout_min_lines,"--test"),assert_json_field_equals:parseLinkedTestAssertionEqualsMap(kv.assert_json_field_equals,"--test"),assert_json_field_gte:parseLinkedTestAssertionGteMap(kv.assert_json_field_gte,"--test"),note:parseOptionalString(kv.note)}});return{values,explicitEmpty:false}}function parseDocs(raw){if(!raw||raw.length===0)return{values:void 0,explicitEmpty:false};assertNoLegacyNoneTokens(raw,"--doc","Use --clear-docs to clear linked docs.");const values=raw.map(entry=>{const trimmedEntry=entry.trim();const isStructured=looksLikeStructuredEntry(trimmedEntry,LINKED_ARTIFACT_SEED_KEYS);const kv=isStructured?parseCsvKv(entry,"--doc"):{path:trimmedEntry};if(isStructured){assertNoUnknownCsvKeys(kv,"--doc",LINKED_ARTIFACT_SEED_KEYS)}if(!kv.path){throw new PmCliError("--doc requires path=<value> or a bare doc path",EXIT_CODE.USAGE)}return{path:kv.path,scope:ensureEnumValue(kv.scope??"project",SCOPE_VALUES,"doc scope"),note:parseOptionalString(kv.note)}});return{values,explicitEmpty:false}}function parseReminders(raw,nowValue){if(!raw||raw.length===0)return{values:void 0,explicitEmpty:false};assertNoLegacyNoneTokens(raw,"--reminder","Use --clear-reminders to clear reminders.");return{values:parseReminderEntries(raw,new Date(nowValue),{valueMode:"raw"}),explicitEmpty:false}}function parseEvents(raw,nowValue){if(!raw||raw.length===0)return{values:void 0,explicitEmpty:false};assertNoLegacyNoneTokens(raw,"--event","Use --clear-events to clear linked events.");return{values:parseEventEntries(raw,new Date(nowValue),{allDayEmptyGuard:"defined",recurrenceEmptyNumericGuard:"defined"}),explicitEmpty:false}}function buildChangedFields(itemMetadata,body,explicitUnsets,additionalItemMetadataKeys=[]){const changed=[...ITEM_METADATA_KEY_ORDER.filter(key=>itemMetadata[key]!==void 0),...additionalItemMetadataKeys.filter(key=>itemMetadata[key]!==void 0),...body.length>0?["body"]:[],...explicitUnsets.map(key=>`unset:${key}`)];return Array.from(new Set(changed))}function buildHistoryMessage(baseMessage,explicitUnsets){const trimmed=baseMessage??"";if(explicitUnsets.length===0){return trimmed}const suffix=`explicit_unset=${explicitUnsets.join(",")}`;return trimmed?`${trimmed} | ${suffix}`:suffix}function normalizeCreatePolicyOptionKey(raw,typeName,sourceLabel){const canonical=canonicalizeCommandOptionKey("create",raw);if(!canonical){throw new PmCliError(`Unsupported ${sourceLabel} entry "${raw}" for type "${typeName}"`,EXIT_CODE.CONFLICT)}return canonical}function buildCreateOptionValueLookup(options){return{scalarValues:{title:options.title,description:options.description,type:options.type,status:options.status,priority:options.priority,tags:options.tags,body:options.body,deadline:options.deadline,estimatedMinutes:options.estimatedMinutes,acceptanceCriteria:options.acceptanceCriteria,definitionOfReady:options.definitionOfReady,order:options.order??options.rank,goal:options.goal,objective:options.objective,value:options.value,impact:options.impact,outcome:options.outcome,whyNow:options.whyNow,author:options.author,message:options.message,assignee:options.assignee,parent:options.parent,reviewer:options.reviewer,risk:options.risk,confidence:options.confidence,sprint:options.sprint,release:options.release,blockedBy:options.blockedBy,blockedReason:options.blockedReason,unblockNote:options.unblockNote,reporter:options.reporter,severity:options.severity,environment:options.environment,reproSteps:options.reproSteps,resolution:options.resolution,expectedResult:options.expectedResult,actualResult:options.actualResult,affectedVersion:options.affectedVersion,fixedVersion:options.fixedVersion,component:options.component,regression:options.regression,customerImpact:options.customerImpact},repeatableValues:{dep:options.dep,comment:options.comment,note:options.note,learning:options.learning,file:options.file,test:options.test,doc:options.doc,reminder:options.reminder,event:options.event,typeOption:options.typeOption,field:options.field},addTags:options.addTags}}function hasCreateOptionValue(lookup,optionKey){if(optionKey==="tags"){return lookup.scalarValues.tags!==void 0||Array.isArray(lookup.addTags)&&lookup.addTags.length>0}if(Object.prototype.hasOwnProperty.call(lookup.scalarValues,optionKey)){return lookup.scalarValues[optionKey]!==void 0}if(Object.prototype.hasOwnProperty.call(lookup.repeatableValues,optionKey)){const value=lookup.repeatableValues[optionKey];return Array.isArray(value)&&value.length>0}return false}function buildRequiredCreateOptions(typeDefinition,createMode){const requiredOptions=new Set(["title","type"]);if(createMode!=="strict"){return requiredOptions}for(const field of typeDefinition.required_create_fields){requiredOptions.add(normalizeCreatePolicyOptionKey(field,typeDefinition.name,"required_create_fields"))}for(const field of typeDefinition.required_create_repeatables){requiredOptions.add(normalizeCreatePolicyOptionKey(field,typeDefinition.name,"required_create_repeatables"))}return requiredOptions}function assertNoDisabledCreateOptions(disabledOptions,lookup,clearOptionKeys,typeName){for(const option of disabledOptions){if(!hasCreateOptionValue(lookup,option)&&!clearOptionKeys.has(option)){continue}throw new PmCliError(`Option ${commandOptionFlagLabel("create",option)} is disabled for type "${typeName}" by command_option_policies`,EXIT_CODE.USAGE)}}function assertNoStrictRequiredOptionClears(requiredOptions,createMode,clearOptionKeys){if(createMode!=="strict"){return}const strictRequiredClears=requiredOptions.filter(required=>clearOptionKeys.has(required)&&!supportsCreateExplicitEmpty(required));if(strictRequiredClears.length===0){return}const requiredFlags=[...new Set(strictRequiredClears.map(required=>commandOptionFlagLabel("create",required)))].sort((left,right)=>left.localeCompare(right));throw new PmCliError(`Strict create mode requires concrete values for ${requiredFlags.join(", ")}; --unset/--clear-* directives cannot satisfy required options`,EXIT_CODE.USAGE)}function parseTypeOptions(raw){if(!raw||raw.length===0){return{values:void 0,explicitEmpty:false}}assertNoLegacyNoneTokens(raw,"--type-option","Use --clear-type-options to clear existing type options.");return{values:parseTypeOptionEntries(raw),explicitEmpty:false}}async function resolveCreateStdinInputs(options){const scalarFields=[["body","--body"],["description","--description"]];const listFields=[["dep","--dep"],["comment","--comment"],["note","--note"],["learning","--learning"],["file","--file"],["test","--test"],["doc","--doc"],["reminder","--reminder"],["event","--event"],["typeOption","--type-option"],["field","--field"]];return await resolveMutationStdinTokenFields(options,scalarFields,listFields)}async function resolveCreateTransportInputs(options){return shouldResolveMutationStdinTokens(options)?await resolveCreateStdinInputs(options):options}function resolveCreateMode(createMode,defaultMode){if(createMode===void 0){return defaultMode}const normalized=createMode.trim().toLowerCase();if(normalized.length===0){return defaultMode}if(normalized==="strict"||normalized==="progressive"){return normalized}throw new PmCliError(`Invalid --create-mode value "${createMode}". Allowed: ${CREATE_MODE_VALUES.join(", ")}`,EXIT_CODE.USAGE)}function resolveScheduleCreatePreset(raw){if(raw===void 0){return void 0}const normalized=raw.trim().toLowerCase();if(normalized.length===0){throw new PmCliError("--schedule-preset must not be empty",EXIT_CODE.USAGE)}if(normalized==="lightweight"||normalized==="lite"||normalized==="schedule-lite"){return"lightweight"}throw new PmCliError(`Invalid --schedule-preset value "${raw}". Allowed: ${SCHEDULE_CREATE_PRESET_VALUES.join(", ")}`,EXIT_CODE.USAGE)}function resolveEffectiveCreateMode(createMode,schedulePreset,defaultMode){const resolvedMode=resolveCreateMode(createMode,defaultMode);if(schedulePreset===void 0){return resolvedMode}const createModeWasExplicit=typeof createMode==="string"&&createMode.trim().length>0;if(createModeWasExplicit&&resolvedMode==="strict"){throw new PmCliError("--schedule-preset lightweight cannot be combined with --create-mode strict. Use --create-mode progressive or omit --create-mode.",EXIT_CODE.USAGE)}return"progressive"}function requireCreateOptionByType(typeDefinition,options,createMode,clearOptionKeys){const typeName=typeDefinition.name;const optionLookup=buildCreateOptionValueLookup(options);const baseRequiredOptions=buildRequiredCreateOptions(typeDefinition,createMode);const policyState=resolveCommandOptionPolicyState(typeDefinition,"create",baseRequiredOptions);if(policyState.errors.length>0){throw new PmCliError(policyState.errors.join("; "),EXIT_CODE.CONFLICT)}assertNoDisabledCreateOptions(policyState.disabled,optionLookup,clearOptionKeys,typeName);assertNoStrictRequiredOptionClears(policyState.required,createMode,clearOptionKeys);const satisfiesRequiredOption=optionKey=>{if(optionKey==="status"&&typeDefinition.default_status!==void 0){return true}if(clearOptionKeys.has(optionKey)&&supportsCreateExplicitEmpty(optionKey)){return true}return hasCreateOptionValue(optionLookup,optionKey)};const missingRequiredOptions=policyState.required.filter(required=>!satisfiesRequiredOption(required));return[...new Set(missingRequiredOptions.map(required=>commandOptionFlagLabel("create",required)))].sort((left,right)=>left.localeCompare(right))}const MISSING_REQUIRED_TYPE_OPTION_PATTERN=/^Missing required type option "([^"]+)" for type "([^"]+)"$/;function collectMissingRequiredTypeOptionKeys(errors,typeName){const missingKeys=[];for(const error of errors){const match=error.match(MISSING_REQUIRED_TYPE_OPTION_PATTERN);if(!match){continue}if(match[2]!==typeName){continue}missingKeys.push(match[1])}return[...new Set(missingKeys)].sort((left,right)=>left.localeCompare(right))}function filterNonMissingTypeOptionErrors(errors,typeName){return errors.filter(error=>{const match=error.match(MISSING_REQUIRED_TYPE_OPTION_PATTERN);return!match||match[2]!==typeName})}function assertNoInvalidTypeOptions(errors,type,typeDefinition,statusRegistry){const nonMissingTypeOptionErrors=filterNonMissingTypeOptionErrors(errors,type);if(nonMissingTypeOptionErrors.length===0){return}const nextValidExample=buildTypeSpecificCreateExample(typeDefinition,[],[],statusRegistry.open_status);throw new PmCliError(nonMissingTypeOptionErrors.join("; "),EXIT_CODE.USAGE,{code:"invalid_argument_value",required:`Provide valid --type-option key/value pairs for type "${type}".`,examples:[nextValidExample],nextSteps:[`Run "pm create --help --type ${type}" to review allowed type-option keys and values.`]})}function typeOptionExampleValue(typeDefinition,key){const optionDefinition=typeDefinition.options.find(option=>option.key===key);const firstAllowed=optionDefinition?.values[0];if(typeof firstAllowed==="string"&&firstAllowed.trim().length>0){return firstAllowed}return"<value>"}function createExampleTokensForFlag(flag,typeName,openStatus){switch(flag){case"--title":return["--title",`"${typeName} example title"`];case"--description":return["--description",`"${typeName} example description"`];case"--type":return["--type",typeName];case"--status":return["--status",openStatus];case"--priority":return["--priority","1"];case"--message":return["--message",`"Create ${typeName} item"`];case"--dep":return["--dep",'"id=pm-xxxx,kind=related,author=maintainer,created_at=now"'];case"--comment":return["--comment",'"author=maintainer,created_at=now,text=Implementation context"'];case"--note":return["--note",'"author=maintainer,created_at=now,text=Design note"'];case"--learning":return["--learning",'"author=maintainer,created_at=now,text=Durable lesson"'];case"--file":return["--file",'"path=src/example.ts,note=implementation file"'];case"--test":return["--test",'"command=node scripts/run-tests.mjs test,timeout_seconds=240"'];case"--doc":return["--doc",'"path=README.md,note=reference doc"'];default:return[flag,'"<value>"']}}function buildTypeSpecificCreateExample(typeDefinition,missingCreateFlags,missingTypeOptionKeys,openStatus){const tokens=["pm","create","--title",`"${typeDefinition.name} example title"`,"--description",`"${typeDefinition.name} example description"`,"--type",typeDefinition.name];const optionalRecommendationFlags=["--status","--priority","--message"];const orderedFlags=[...new Set([...optionalRecommendationFlags,...missingCreateFlags])];const includedFlags=new Set(["--title","--description","--type"]);for(const flag of orderedFlags){if(includedFlags.has(flag)){continue}tokens.push(...createExampleTokensForFlag(flag,typeDefinition.name,openStatus));includedFlags.add(flag)}for(const key of missingTypeOptionKeys){const value=typeOptionExampleValue(typeDefinition,key);tokens.push("--type-option",`${key}=${value}`)}return tokens.join(" ")}function requireStringOption(value,flag){const normalized=value?.trim();if(!normalized){if(flag==="--title"){if(value!==void 0){throw new PmCliError("Title cannot be empty or whitespace-only. Retry: pass a non-empty title with --title.",EXIT_CODE.USAGE)}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)}throw new PmCliError(`Missing required option ${flag}`,EXIT_CODE.USAGE)}return normalized}function mergeCreateOptionsWithTemplate(templateOptions,explicitOptions){const merged={};for(const[key,value]of Object.entries(templateOptions)){merged[key]=Array.isArray(value)?[...value]:value}for(const[key,value]of Object.entries(explicitOptions)){if(value!==void 0){merged[key]=Array.isArray(value)?[...value]:value}}return merged}function normalizeExtensionCommandPath(command){return command.trim().toLowerCase().split(/\s+/).filter(part=>part.length>0).join(" ")}function hasTemplatesShowHandler(){const registrations=getActiveExtensionRegistrations();if(!registrations){return false}return registrations.commands.some(entry=>{return entry.action==="templates-show"||normalizeExtensionCommandPath(entry.command)==="templates show"})}function readTemplateOptionsFromRuntimeResult(result,templateName){if(typeof result!=="object"||result===null||!("options"in result)){throw new PmCliError(`Templates package returned invalid payload for template "${templateName}". Expected an options object.`,EXIT_CODE.GENERIC_FAILURE)}const options=result.options;if(typeof options!=="object"||options===null||Array.isArray(options)){throw new PmCliError(`Templates package returned invalid options for template "${templateName}".`,EXIT_CODE.GENERIC_FAILURE)}const normalized={};for(const[key,value]of Object.entries(options)){if(typeof value==="string"||typeof value==="number"||typeof value==="boolean"){normalized[key]=value;continue}if(Array.isArray(value)&&value.every(entry=>typeof entry==="string")){normalized[key]=[...value];continue}throw new PmCliError(`Templates package returned unsupported option value for "${key}" in template "${templateName}".`,EXIT_CODE.GENERIC_FAILURE)}return normalized}async function loadCreateTemplateOptionsFromRuntime(templateName,global2,pmRoot){if(!hasTemplatesShowHandler()){throw new PmCliError(`--template requires the templates package. Install it first (for example: pm install templates --project).`,EXIT_CODE.USAGE)}const handlerResult=await runActiveCommandHandler({command:"templates show",args:[templateName],options:{},global:global2,pm_root:pmRoot});if(!handlerResult.handled){const warningSuffix=handlerResult.warnings.length>0?` (${handlerResult.warnings.join(", ")})`:"";throw new PmCliError(`Unable to resolve template "${templateName}" via templates package. Run "pm templates show ${templateName}" for details.${warningSuffix}`,EXIT_CODE.USAGE)}return readTemplateOptionsFromRuntimeResult(handlerResult.result,templateName)}function resolveUnsettableOptionalString(unsetKeys,metadataKey,raw){return unsetKeys.has(metadataKey)||raw===void 0?void 0:parseOptionalString(raw)}function resolveUnsettableTransformed(unsetKeys,metadataKey,raw,transform){return unsetKeys.has(metadataKey)||raw===void 0?void 0:transform(raw)}const CALENDAR_RELEVANT_CREATE_TYPES=new Set(["milestone","meeting","reminder","event"]);function createItemLacksSchedule(type,deadline,reminders,events){const hasDeadline=deadline!==void 0;const hasReminders=reminders!==void 0&&reminders.length>0;const hasEvents=events!==void 0&&events.length>0;return CALENDAR_RELEVANT_CREATE_TYPES.has(type.toLowerCase())&&!hasDeadline&&!hasReminders&&!hasEvents}function collectCreateScheduleWarnings(type,id,deadline,reminders,events){const warnings=[];if(type.toLowerCase()==="event"&&(events===void 0||events.length===0)){warnings.push(`event_without_schedule:${id}:no_time_set`)}if(createItemLacksSchedule(type,deadline,reminders,events)){warnings.push(`calendar_item_without_schedule:${id}:no_deadline_or_reminder_or_event (hint: set --deadline <ISO> or --reminder "<when>", or link an Event via --event "start=<ISO>,end=<ISO>"; otherwise this item never appears on pm calendar)`)}return warnings}async function inheritFocusedParent(parent,resolvedOptions,unsetKeys,pmRoot){if(parent!==void 0||unsetKeys.has("parent")||resolvedOptions.parent!==void 0){return{parent,parentSource:void 0}}const focused=await getFocusedItem(pmRoot);if(focused===void 0){return{parent,parentSource:void 0}}return{parent:focused,parentSource:"focus"}}async function validateCreateParentReference(pmRoot,settings,typeRegistry,itemId,parent,policy){const normalized=normalizeItemReference(normalizeParentReferenceValue(parent),settings.id_prefix);if(isExternalDependencyReference(normalized)){return{parent:normalized,warnings:[]}}assertParentReferenceIsNotSelf(itemId,normalized,settings.id_prefix);const parentLocated=await locateItem(pmRoot,normalized,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(parentLocated){return{parent:normalized,warnings:[]}}const normalizedParentId=normalizeItemId(normalized,settings.id_prefix);return{parent:normalized,warnings:validateMissingParentReference(normalizedParentId,policy).warnings}}async function resolveCreateParentWithWarnings(params){if(params.parent===void 0){return{parent:void 0,warnings:[]}}const parentValidation=await validateCreateParentReference(params.pmRoot,params.settings,params.typeRegistry,params.itemId,params.parent,params.policy);return parentValidation}async function resolveCreateItemId(params){if(params.explicitId===void 0){return generateItemId(params.pmRoot,params.settings.id_prefix,{tokenLength:params.settings.ids.token_length,typeToFolder:params.typeRegistry.type_to_folder,probeExisting:false})}if(typeof params.explicitId!=="string"){throw new PmCliError("--id must be a string",EXIT_CODE.USAGE)}const trimmedId=params.explicitId.trim();if(trimmedId.length===0||isPlaceholderReferenceToken(trimmedId)){throw new PmCliError("--id must not be empty or use a placeholder token",EXIT_CODE.USAGE)}const normalizedId=normalizeItemId(trimmedId,params.settings.id_prefix);if(!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(normalizedId)){throw new PmCliError("--id must contain only letters, numbers, and dashes after normalization",EXIT_CODE.USAGE)}return normalizedId}function resolveCreateSprintOrRelease(unsetKeys,metadataKey,raw,field,policy){const resolved=resolveUnsettableOptionalString(unsetKeys,metadataKey,raw);if(resolved===void 0){return{value:void 0,warnings:[]}}const validation=validateSprintOrReleaseValue(field,resolved,policy);return{value:validation.value,warnings:validation.warnings}}async function resolveCreateBlockedByDependency(params){const{pmRoot,settings,typeRegistry,statusRegistry,blockedBy,status,statusExplicit,nowValue,author}=params;let dependencyValues=params.dependencyValues;if(blockedBy===void 0){return{dependencyValues,status}}const normalizedBlockedBy=normalizeItemId(blockedBy,settings.id_prefix);const blockedByLocated=await locateItem(pmRoot,normalizedBlockedBy,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!blockedByLocated){return{dependencyValues,status}}const hasBlockedByDependency=(dependencyValues??[]).some(dependency=>dependency.id===blockedByLocated.id&&dependency.kind==="blocked_by");if(!hasBlockedByDependency){dependencyValues=[...dependencyValues??[],{id:blockedByLocated.id,kind:"blocked_by",created_at:nowValue,author,source_kind:"cli:create:blocked_by",author_source:"detected"}]}if(statusExplicit){return{dependencyValues,status}}const blockedStatus=statusRegistry.blocked_statuses.has("blocked")?"blocked":[...statusRegistry.blocked_statuses].sort((left,right)=>left.localeCompare(right))[0]??statusRegistry.open_status;return{dependencyValues,status:blockedStatus}}function applyCreateDefaultType(resolvedOptions,settings,typeRegistry){const explicitStrictMode=typeof resolvedOptions.createMode==="string"&&resolvedOptions.createMode.trim().toLowerCase()==="strict";if(explicitStrictMode){return}const defaultType=settings.governance.create_default_type?.trim();if(defaultType&&defaultType.length>0&&resolveTypeName(defaultType,typeRegistry)){resolvedOptions.type=defaultType;return}if(resolveTypeName("Task",typeRegistry)){resolvedOptions.type="Task"}}function collectTemplateCustomTypeOptions(typeDefinition,resolvedOptions){return typeDefinition.options.filter(option=>canonicalizeCommandOptionKey("create",option.key)===void 0).flatMap(option=>{const value=resolvedOptions[option.key];if(value===void 0){return[]}if(typeof value==="string"||typeof value==="number"||typeof value==="boolean"){return[option]}throw new PmCliError(`Template custom type option "${option.key}" must be a string, number, or boolean value`,EXIT_CODE.USAGE)})}async function resolveCreateTypeSelection(options,global2,pmRoot,settings,typeRegistry){let resolvedOptions=options;const warnings=[];if(resolvedOptions.template!==void 0){const templateName=resolvedOptions.template.trim();if(templateName.length===0){throw new PmCliError("--template must not be empty. Omit --template to disable template usage.",EXIT_CODE.USAGE)}const templateOptions=await loadCreateTemplateOptionsFromRuntime(templateName,global2,pmRoot);resolvedOptions=normalizeLegacyNoneCreateOptions(mergeCreateOptionsWithTemplate(templateOptions,resolvedOptions))}if(resolvedOptions.type===void 0){applyCreateDefaultType(resolvedOptions,settings,typeRegistry)}if(resolvedOptions.type===void 0){throw new PmCliError("Missing required option --type <value>",EXIT_CODE.USAGE)}let resolvedTypeName=resolveTypeName(resolvedOptions.type,typeRegistry);if(!resolvedTypeName){const synonymCanonical=resolveTypeSynonym(resolvedOptions.type);const synonymResolved=synonymCanonical?resolveTypeName(synonymCanonical,typeRegistry):void 0;if(synonymResolved){warnings.push(`type_coercion:${resolvedOptions.type.trim()}:${synonymResolved}`);resolvedOptions.type=synonymResolved;resolvedTypeName=synonymResolved}else{throw new PmCliError(buildInvalidTypeError(resolvedOptions.type,typeRegistry.types,resolveItemTypesFilePath(pmRoot,settings.schema)),EXIT_CODE.USAGE)}}const typeDefinition=resolveTypeDefinition(resolvedTypeName,typeRegistry);if(!typeDefinition){throw new PmCliError(`Invalid type value "${resolvedOptions.type}"`,EXIT_CODE.USAGE)}const type=typeDefinition.name;const matchedTemplateTypeOptions=collectTemplateCustomTypeOptions(typeDefinition,resolvedOptions);const templateTypeOptions=matchedTemplateTypeOptions.map(option=>`${option.key}=${String(resolvedOptions[option.key])}`);if(templateTypeOptions.length>0){resolvedOptions.typeOption=[...templateTypeOptions,...resolvedOptions.typeOption??[]];for(const option of matchedTemplateTypeOptions){delete resolvedOptions[option.key]}}const schedulePreset=resolveScheduleCreatePreset(resolvedOptions.schedulePreset);if(schedulePreset!==void 0&&!SCHEDULE_CREATE_PRESET_TYPES.has(type)){throw new PmCliError(`--schedule-preset ${schedulePreset} is only supported for Reminder, Meeting, or Event types`,EXIT_CODE.USAGE)}const createMode=resolveEffectiveCreateMode(resolvedOptions.createMode,schedulePreset,settings.governance.create_mode_default);return{resolvedOptions,typeDefinition,type,schedulePreset,createMode,warnings}}function collectCreateClearTargets(resolvedOptions,unsetTargets){const explicitUnsets=new Set(unsetTargets.metadataKeys);const clearOptionKeys=new Set(unsetTargets.optionKeys);const clearCollectionDefinitions=[{enabled:resolvedOptions.clearDeps,optionKey:"dep",clearFlag:"--clear-deps",valueFlag:"--dep",values:resolvedOptions.dep,metadataKey:"dependencies"},{enabled:resolvedOptions.clearComments,optionKey:"comment",clearFlag:"--clear-comments",valueFlag:"--comment",values:resolvedOptions.comment,metadataKey:"comments"},{enabled:resolvedOptions.clearNotes,optionKey:"note",clearFlag:"--clear-notes",valueFlag:"--note",values:resolvedOptions.note,metadataKey:"notes"},{enabled:resolvedOptions.clearLearnings,optionKey:"learning",clearFlag:"--clear-learnings",valueFlag:"--learning",values:resolvedOptions.learning,metadataKey:"learnings"},{enabled:resolvedOptions.clearFiles,optionKey:"file",clearFlag:"--clear-files",valueFlag:"--file",values:resolvedOptions.file,metadataKey:"files"},{enabled:resolvedOptions.clearTests,optionKey:"test",clearFlag:"--clear-tests",valueFlag:"--test",values:resolvedOptions.test,metadataKey:"tests"},{enabled:resolvedOptions.clearDocs,optionKey:"doc",clearFlag:"--clear-docs",valueFlag:"--doc",values:resolvedOptions.doc,metadataKey:"docs"},{enabled:resolvedOptions.clearReminders,optionKey:"reminder",clearFlag:"--clear-reminders",valueFlag:"--reminder",values:resolvedOptions.reminder,metadataKey:"reminders"},{enabled:resolvedOptions.clearEvents,optionKey:"event",clearFlag:"--clear-events",valueFlag:"--event",values:resolvedOptions.event,metadataKey:"events"},{enabled:resolvedOptions.clearTypeOptions,optionKey:"typeOption",clearFlag:"--clear-type-options",valueFlag:"--type-option",values:resolvedOptions.typeOption,metadataKey:"type_options"}];for(const definition of clearCollectionDefinitions){if(!definition.enabled){continue}if(definition.values&&definition.values.length>0){throw new PmCliError(`Cannot combine ${definition.clearFlag} with ${definition.valueFlag}`,EXIT_CODE.USAGE)}explicitUnsets.add(definition.metadataKey);clearOptionKeys.add(definition.optionKey)}return{explicitUnsets,clearOptionKeys}}function assertNoCreateScalarUnsetConflicts(resolvedOptions,unsetTargets){const scalarOptionPresence={tags:resolvedOptions.tags!==void 0,deadline:resolvedOptions.deadline!==void 0,estimatedMinutes:resolvedOptions.estimatedMinutes!==void 0,acceptanceCriteria:resolvedOptions.acceptanceCriteria!==void 0,definitionOfReady:resolvedOptions.definitionOfReady!==void 0,order:resolvedOptions.order!==void 0||resolvedOptions.rank!==void 0,goal:resolvedOptions.goal!==void 0,objective:resolvedOptions.objective!==void 0,value:resolvedOptions.value!==void 0,impact:resolvedOptions.impact!==void 0,outcome:resolvedOptions.outcome!==void 0,whyNow:resolvedOptions.whyNow!==void 0,author:resolvedOptions.author!==void 0,assignee:resolvedOptions.assignee!==void 0,parent:resolvedOptions.parent!==void 0,reviewer:resolvedOptions.reviewer!==void 0,risk:resolvedOptions.risk!==void 0,confidence:resolvedOptions.confidence!==void 0,sprint:resolvedOptions.sprint!==void 0,release:resolvedOptions.release!==void 0,blockedBy:resolvedOptions.blockedBy!==void 0,blockedReason:resolvedOptions.blockedReason!==void 0,unblockNote:resolvedOptions.unblockNote!==void 0,reporter:resolvedOptions.reporter!==void 0,severity:resolvedOptions.severity!==void 0,environment:resolvedOptions.environment!==void 0,reproSteps:resolvedOptions.reproSteps!==void 0,resolution:resolvedOptions.resolution!==void 0,expectedResult:resolvedOptions.expectedResult!==void 0,actualResult:resolvedOptions.actualResult!==void 0,affectedVersion:resolvedOptions.affectedVersion!==void 0,fixedVersion:resolvedOptions.fixedVersion!==void 0,component:resolvedOptions.component!==void 0,regression:resolvedOptions.regression!==void 0,customerImpact:resolvedOptions.customerImpact!==void 0};for(const[optionKey,hasValue]of Object.entries(scalarOptionPresence)){if(!hasValue||!unsetTargets.optionKeys.has(optionKey)){continue}const unsetField=CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey)??optionKey;throw new PmCliError(`Cannot combine --unset ${unsetField} with ${commandOptionFlagLabel("create",optionKey)}`,EXIT_CODE.USAGE)}}function assertNoLegacyCreateScalarTokens(resolvedOptions){const assertNoLegacyScalarToken=(value,optionKey)=>{const unsetField=CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey);const hint=unsetField?`Use --unset ${unsetField} to clear this field.`:void 0;assertNoLegacyNoneToken(value,commandOptionFlagLabel("create",optionKey),hint)};assertNoLegacyScalarToken(resolvedOptions.tags,"tags");assertNoLegacyScalarToken(resolvedOptions.deadline,"deadline");assertNoLegacyScalarToken(resolvedOptions.estimatedMinutes,"estimatedMinutes");assertNoLegacyScalarToken(resolvedOptions.acceptanceCriteria,"acceptanceCriteria");assertNoLegacyScalarToken(resolvedOptions.definitionOfReady,"definitionOfReady");assertNoLegacyScalarToken(resolvedOptions.order??resolvedOptions.rank,"order");assertNoLegacyScalarToken(resolvedOptions.goal,"goal");assertNoLegacyScalarToken(resolvedOptions.objective,"objective");assertNoLegacyScalarToken(resolvedOptions.value,"value");assertNoLegacyScalarToken(resolvedOptions.impact,"impact");assertNoLegacyScalarToken(resolvedOptions.outcome,"outcome");assertNoLegacyScalarToken(resolvedOptions.whyNow,"whyNow");assertNoLegacyScalarToken(resolvedOptions.author,"author");assertNoLegacyScalarToken(resolvedOptions.assignee,"assignee");assertNoLegacyScalarToken(resolvedOptions.parent,"parent");assertNoLegacyScalarToken(resolvedOptions.reviewer,"reviewer");assertNoLegacyScalarToken(resolvedOptions.risk,"risk");assertNoLegacyScalarToken(resolvedOptions.confidence,"confidence");assertNoLegacyScalarToken(resolvedOptions.sprint,"sprint");assertNoLegacyScalarToken(resolvedOptions.release,"release");assertNoLegacyScalarToken(resolvedOptions.blockedBy,"blockedBy");assertNoLegacyScalarToken(resolvedOptions.blockedReason,"blockedReason");assertNoLegacyScalarToken(resolvedOptions.unblockNote,"unblockNote");assertNoLegacyScalarToken(resolvedOptions.reporter,"reporter");assertNoLegacyScalarToken(resolvedOptions.severity,"severity");assertNoLegacyScalarToken(resolvedOptions.environment,"environment");assertNoLegacyScalarToken(resolvedOptions.reproSteps,"reproSteps");assertNoLegacyScalarToken(resolvedOptions.resolution,"resolution");assertNoLegacyScalarToken(resolvedOptions.expectedResult,"expectedResult");assertNoLegacyScalarToken(resolvedOptions.actualResult,"actualResult");assertNoLegacyScalarToken(resolvedOptions.affectedVersion,"affectedVersion");assertNoLegacyScalarToken(resolvedOptions.fixedVersion,"fixedVersion");assertNoLegacyScalarToken(resolvedOptions.component,"component");assertNoLegacyScalarToken(resolvedOptions.regression,"regression");assertNoLegacyScalarToken(resolvedOptions.customerImpact,"customerImpact")}function assertNoCreateFieldUnsetConflicts(registeredItemFieldValues,runtimeCreateFieldValues,unsetTargets){for(const fieldKey of Object.keys(registeredItemFieldValues)){if(!unsetTargets.metadataKeys.has(fieldKey)){continue}throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_","-")} with --field ${fieldKey}=...`,EXIT_CODE.USAGE)}for(const fieldKey of Object.keys(runtimeCreateFieldValues.values??{})){if(!unsetTargets.metadataKeys.has(fieldKey)){continue}throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_","-")} with its value flag`,EXIT_CODE.USAGE)}}const CLEAR_FLAG_BY_REQUIRED_CREATE_FLAG={"--comment":"--clear-comments","--dep":"--clear-deps","--doc":"--clear-docs","--event":"--clear-events","--file":"--clear-files","--learning":"--clear-learnings","--note":"--clear-notes","--reminder":"--clear-reminders","--test":"--clear-tests","--type-option":"--clear-type-options"};function assertNoMissingRequiredCreateOptions(params){const{combinedMissingFlags,typeDefinition,missingRequiredCreateFlags,missingRequiredTypeOptionKeys,openStatus,type,createMode,missingRequiredRuntimeFields}=params;if(combinedMissingFlags.length===0){return}const runtimeFieldSyntax=missingRequiredRuntimeFields.map(field=>{const placeholder=field.type==="boolean"?"<true|false>":field.type==="array"?"<json-array>":field.type==="object"?"<json-object>":field.type==="number"?"<number>":field.type==="string_array"||field.repeatable?"<value>":"<string>";return{example:`--${field.cli_flag} ${placeholder}`,description:`--${field.cli_flag} maps to ${field.metadata_key} (${field.type}${field.repeatable?", repeatable":""})`}});const nextValidExample=[buildTypeSpecificCreateExample(typeDefinition,missingRequiredCreateFlags,missingRequiredTypeOptionKeys,openStatus),...runtimeFieldSyntax.map(field=>field.example)].join(" ");const nextSteps=[`Run "pm create --help --type ${type}" for type-aware required option guidance.`,...combinedMissingFlags.filter(flag=>flag==="--title").map(()=>'Title can also be passed as the first positional argument (example: pm create "Your title" --type '+type+").")];if(createMode==="strict"){nextSteps.push('For staged onboarding, retry with "--create-mode progressive".');if(SCHEDULE_CREATE_PRESET_TYPES.has(type)){nextSteps.push('For minimal scheduling inputs, try "--schedule-preset lightweight".')}}if(runtimeFieldSyntax.length>0){nextSteps.push(`Required custom field formats: ${runtimeFieldSyntax.map(field=>field.description).join("; ")}.`)}const collectionClearFlags=[...new Set(combinedMissingFlags.flatMap(flag=>{const normalizedFlag=flag.split(" ",1)[0];const clearFlag=CLEAR_FLAG_BY_REQUIRED_CREATE_FLAG[normalizedFlag];return clearFlag?[clearFlag]:[]}))];if(collectionClearFlags.length>0){nextSteps.push(`If the truthful value is an empty collection, use ${collectionClearFlags.join(", ")} instead of inventing metadata.`)}const errorMessage=combinedMissingFlags.length===1?`Missing required option ${combinedMissingFlags[0]} for type "${type}"`:`Missing required options ${combinedMissingFlags.join(", ")} for type "${type}"`;throw new PmCliError(errorMessage,EXIT_CODE.USAGE,{code:"missing_required_option",required:`Provide all required create options and type options for type "${type}" in one invocation.`,examples:[...collectionClearFlags.map(flag=>`pm create --type ${type} ${flag} ...`),nextValidExample],nextSteps,recovery:createMode==="strict"?{recovery_mode:"compact",missing_required_fields:combinedMissingFlags,suggested_flags:[...collectionClearFlags,...combinedMissingFlags,"--create-mode progressive"]}:void 0})}function resolveCreateTags(unsetKeys,resolvedOptions){if(unsetKeys.has("tags")&&Array.isArray(resolvedOptions.addTags)&&resolvedOptions.addTags.length>0){throw new PmCliError("Cannot combine --unset tags with --add-tags",EXIT_CODE.USAGE)}const baseTags=unsetKeys.has("tags")?[]:resolvedOptions.tags!==void 0?parseTags(resolvedOptions.tags):[];return mergeAdditiveTags(baseTags,resolvedOptions.addTags)}function resolveCreateOrder(unsetKeys,resolvedOptions){if(resolvedOptions.order!==void 0&&resolvedOptions.rank!==void 0&&resolvedOptions.order!==resolvedOptions.rank){throw new PmCliError("--order and --rank must match when both are provided",EXIT_CODE.USAGE)}const orderRaw=resolvedOptions.order??resolvedOptions.rank;const order=resolveUnsettableTransformed(unsetKeys,"order",orderRaw,raw=>parseOptionalNumber(raw,"order"));if(order!==void 0&&!Number.isInteger(order)){throw new PmCliError("Order must be an integer",EXIT_CODE.USAGE)}return order}function resolveCreateCloseReason(status,statusRegistry,settings,resolvedOptions,resolution,nowValue){if(resolvedOptions.completedAt!==void 0&&status!==statusRegistry.close_status){throw new PmCliError("--completed-at requires a terminal create status.",EXIT_CODE.USAGE)}const completedAt=status!==statusRegistry.close_status?void 0:resolvedOptions.completedAt===void 0?nowValue:resolveIsoOrRelative(resolvedOptions.completedAt,new Date(nowValue),"completed-at");if(status!==statusRegistry.close_status){return{closeReason:void 0,completedAt,warnings:[]}}const reasonInput=settings.governance.require_close_reason?{explicit:resolvedOptions.closeReason??resolvedOptions.message,resolution}:{explicit:resolvedOptions.closeReason};return{closeReason:requireTerminalReasonWithRecovery(reasonInput,settings.governance.require_close_reason,{operation:"create",status}).closeReason,completedAt,warnings:[]}}async function writeCreatedItem(params){const{pmRoot,type,id,settings,typeRegistry,author,extensionFieldNames,afterDocument,beforeDocument,historyMessage,changedFields,nowValue,similarityCandidate,allowDuplicate}=params;const itemPath=getItemPath(pmRoot,type,id,settings.item_format,typeRegistry.type_to_folder);const historyPath=getHistoryPath(pmRoot,id);const relationshipRegistry=resolveWorkspaceRelationshipKindRegistry();const hierarchyMutationRequired=afterDocument.metadata.parent!==void 0||(afterDocument.metadata.dependencies??[]).some(dependency=>relationshipRegistry.resolve(dependency.kind)?.hierarchy);const hierarchyLockRelease=await acquireHierarchyMutationLock({pmRoot,author,ttlSeconds:settings.locks.ttl_seconds,waitMs:settings.locks.wait_ms,required:hierarchyMutationRequired});let hierarchyLockHeld=hierarchyMutationRequired;let hookWarnings=[];try{const lockRelease=await acquireLock(pmRoot,id,settings.locks.ttl_seconds,author,false,settings.governance.force_required_for_stale_lock,settings.locks.wait_ms);try{const graphBeforeCreate=afterDocument.metadata.parent!==void 0||afterDocument.metadata.dependencies!==void 0&&afterDocument.metadata.dependencies.length>0?await listAllItemMetadataLight(pmRoot,settings.item_format,typeRegistry.type_to_folder,void 0,settings.schema):void 0;const existing=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(existing){throw new PmCliError(`Item "${id}" already exists`,EXIT_CODE.CONFLICT)}if(graphBeforeCreate){const statusRegistry=resolveRuntimeStatusRegistry(settings.schema);assertHierarchyMutationAllowed(graphBeforeCreate,[...graphBeforeCreate,afterDocument.metadata],id,status=>isTerminalStatus(status,statusRegistry),relationshipRegistry)}const workflowPolicy=await enforceWorkflowMutation({pmRoot,settings,operation:"create",author,before:null,after:afterDocument});await runActiveBeforeMutationHooks({pm_root:pmRoot,operation:"create",before:null,after:afterDocument,changed_fields:changedFields,sdk:createMutationGuardSdk({pmRoot,settings,typeToFolder:typeRegistry.type_to_folder})});const releaseDerivedIndexLock=await acquireItemMetadataDerivedIndexLock(pmRoot,author,{required:settings.governance.duplicate_detection_mode==="strict"&&allowDuplicate!==true});let derivedIndexWarnings=[];try{if(settings.governance.duplicate_detection_mode==="strict"&&allowDuplicate!==true){await evaluateSimilarityGovernance(similarityCandidate,{pmRoot,mode:"strict",threshold:settings.governance.duplicate_detection_threshold,limit:settings.governance.duplicate_detection_limit,allowDuplicate:false})}await writeFileAtomic(itemPath,serializeItemDocument(afterDocument,{format:settings.item_format,schema:settings.schema,extensionFieldNames}));try{const entry=createHistoryEntry({nowIso:nowValue,author,op:"create",before:beforeDocument,after:afterDocument,message:historyMessage,context:workflowPolicy.decisions.length===0?void 0:{workflow_policies:workflowPolicy.decisions}});await appendHistoryEntry(historyPath,entry)}catch(error){await removeFileIfExists(itemPath);throw error}if(hierarchyLockHeld){await hierarchyLockRelease();hierarchyLockHeld=false}derivedIndexWarnings=await refreshItemMetadataDerivedIndex({pmRoot,preferredFormat:settings.item_format,typeToFolder:typeRegistry.type_to_folder,schema:settings.schema,itemPath,document:afterDocument})}finally{await releaseDerivedIndexLock()}hookWarnings=[...workflowPolicy.warnings,...graphBeforeCreate?collectNewOrderingCycleWarnings(graphBeforeCreate,[...graphBeforeCreate,afterDocument.metadata],id):[],...derivedIndexWarnings,...await runActiveOnWriteHooks({path:itemPath,scope:"project",op:"create",item_id:afterDocument.metadata.id,item_type:afterDocument.metadata.type,before:beforeDocument,after:afterDocument,changed_fields:changedFields}),...await runActiveOnWriteHooks({path:historyPath,scope:"project",op:"create:history",item_id:afterDocument.metadata.id,item_type:afterDocument.metadata.type,before:beforeDocument,after:afterDocument,changed_fields:changedFields})];recordAfterCommandAffectedItem({id:afterDocument.metadata.id,op:"create",item_type:afterDocument.metadata.type,status:afterDocument.metadata.status,current:projectAfterCommandItemSnapshot(afterDocument.metadata,changedFields),changed_fields:changedFields})}finally{await lockRelease()}}finally{if(hierarchyLockHeld)await hierarchyLockRelease()}return hookWarnings}async function runCreate(options,global2){let resolvedOptions=normalizeLegacyNoneCreateOptions(await resolveCreateTransportInputs(options));const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot);const statusRegistry=resolveRuntimeStatusRegistry(settings.schema);const runtimeFieldRegistry=resolveRuntimeFieldRegistry(settings.schema);const typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations());const typeSelection=await resolveCreateTypeSelection(resolvedOptions,global2,pmRoot,settings,typeRegistry);resolvedOptions=typeSelection.resolvedOptions;const{typeDefinition,type,createMode}=typeSelection;const unsetTargets=parseCreateUnsetTargets(resolvedOptions.unset,runtimeFieldRegistry);const{explicitUnsets,clearOptionKeys}=collectCreateClearTargets(resolvedOptions,unsetTargets);assertNoCreateScalarUnsetConflicts(resolvedOptions,unsetTargets);assertNoLegacyCreateScalarTokens(resolvedOptions);const missingRequiredCreateFlags=requireCreateOptionByType(typeDefinition,resolvedOptions,createMode,clearOptionKeys);const nowValue=nowIso();const author=resolveAuthor(parseOptionalString(resolvedOptions.author),settings.author_default);const dependencies=parseDependencies(resolvedOptions.dep,nowValue,settings.id_prefix,author);const comments=parseLogSeed("--comment",resolvedOptions.comment,nowValue,author);const notes=parseLogSeed("--note",resolvedOptions.note,nowValue,author);const learnings=parseLogSeed("--learning",resolvedOptions.learning,nowValue,author);const files=parseFiles(resolvedOptions.file);const tests=parseTests(resolvedOptions.test);tests.values=await attachLinkedTestMutationProvenance(tests.values,author,nowValue);const docs=parseDocs(resolvedOptions.doc);const reminders=parseReminders(resolvedOptions.reminder,nowValue);const events=parseEvents(resolvedOptions.event,nowValue);const typeOptions=parseTypeOptions(resolvedOptions.typeOption);const validatedTypeOptions=validateTypeOptions(type,typeOptions.values,typeRegistry);const extensionRegistrations=getActiveExtensionRegistrations();const extensionFieldNames=collectRegisteredItemFieldNames(extensionRegistrations);const registeredItemFieldValues=parseRegisteredItemFieldAssignments(resolvedOptions.field,extensionRegistrations);const runtimeCreateFieldValues=collectRuntimeCreateFieldValues(resolvedOptions,runtimeFieldRegistry,type);const missingRequiredRuntimeFlagSet=new Set(runtimeCreateFieldValues.missing_required_flags);const missingRequiredRuntimeFields=runtimeFieldRegistry.definitions.filter(field=>missingRequiredRuntimeFlagSet.has(`--${field.cli_flag}`));assertNoCreateFieldUnsetConflicts(registeredItemFieldValues,runtimeCreateFieldValues,unsetTargets);const missingRequiredTypeOptionKeys=collectMissingRequiredTypeOptionKeys(validatedTypeOptions.errors,type);const missingRequiredTypeOptionFlags=missingRequiredTypeOptionKeys.map(key=>`--type-option ${key}=<value>`);const combinedMissingFlags=[...new Set([...missingRequiredCreateFlags,...missingRequiredTypeOptionFlags,...runtimeCreateFieldValues.missing_required_flags])].sort((left,right)=>left.localeCompare(right));assertNoMissingRequiredCreateOptions({combinedMissingFlags,typeDefinition,missingRequiredCreateFlags,missingRequiredTypeOptionKeys,openStatus:statusRegistry.open_status,type,createMode,missingRequiredRuntimeFields});assertNoInvalidTypeOptions(validatedTypeOptions.errors,type,typeDefinition,statusRegistry);const id=await resolveCreateItemId({pmRoot,settings,typeRegistry,explicitId:resolvedOptions.id});let status=resolvedOptions.status!==void 0?parseStatusValue(resolvedOptions.status,statusRegistry):resolveCreateDefaultStatus(typeDefinition,statusRegistry);const priority=resolvedOptions.priority!==void 0?resolvePriority(resolvedOptions.priority):2;const unsetKeys=unsetTargets.metadataKeys;const tags=resolveCreateTags(unsetKeys,resolvedOptions);const deadline=resolveUnsettableTransformed(unsetKeys,"deadline",resolvedOptions.deadline,raw=>resolveIsoOrRelative(raw,new Date(nowValue),"deadline"));const estimatedMinutes=resolveUnsettableTransformed(unsetKeys,"estimated_minutes",resolvedOptions.estimatedMinutes,raw=>parseOptionalNonNegativeInteger(raw,"estimated-minutes"));const acceptanceCriteria=resolveUnsettableOptionalString(unsetKeys,"acceptance_criteria",resolvedOptions.acceptanceCriteria);const definitionOfReady=resolveUnsettableOptionalString(unsetKeys,"definition_of_ready",resolvedOptions.definitionOfReady);const order=resolveCreateOrder(unsetKeys,resolvedOptions);const goal=resolveUnsettableOptionalString(unsetKeys,"goal",resolvedOptions.goal);const objective=resolveUnsettableOptionalString(unsetKeys,"objective",resolvedOptions.objective);const value=resolveUnsettableOptionalString(unsetKeys,"value",resolvedOptions.value);const impact=resolveUnsettableOptionalString(unsetKeys,"impact",resolvedOptions.impact);const outcome=resolveUnsettableOptionalString(unsetKeys,"outcome",resolvedOptions.outcome);const whyNow=resolveUnsettableOptionalString(unsetKeys,"why_now",resolvedOptions.whyNow);const assignee=resolveUnsettableOptionalString(unsetKeys,"assignee",resolvedOptions.assignee);const authorValue=unsetKeys.has("author")?void 0:parseOptionalString(resolvedOptions.author)??author;const initialParent=resolveUnsettableOptionalString(unsetKeys,"parent",resolvedOptions.parent);const inheritedParent=await inheritFocusedParent(initialParent,resolvedOptions,unsetKeys,pmRoot);let parent=inheritedParent.parent;const parentSource=inheritedParent.parentSource;const reviewer=resolveUnsettableOptionalString(unsetKeys,"reviewer",resolvedOptions.reviewer);const risk=resolveUnsettableTransformed(unsetKeys,"risk",resolvedOptions.risk,raw=>ensureEnumValue(normalizeRiskInput(raw),RISK_VALUES,"risk"));const confidence=resolveUnsettableTransformed(unsetKeys,"confidence",resolvedOptions.confidence,raw=>parseConfidenceInput(raw));const parentReferencePolicy=resolvedOptions.allowMissingParent===true&&settings.validation.parent_reference==="strict_error"?"warn":settings.validation.parent_reference;const sprintReleasePolicy=settings.validation.sprint_release_format;const validationWarnings=[...typeSelection.warnings,...collectCreateScheduleWarnings(type,id,deadline,reminders.values,events.values)];const parentValidation=await resolveCreateParentWithWarnings({itemId:id,parent,pmRoot,settings,typeRegistry,policy:parentReferencePolicy});parent=parentValidation.parent;validationWarnings.push(...parentValidation.warnings);const sprintResolved=resolveCreateSprintOrRelease(unsetKeys,"sprint",resolvedOptions.sprint,"sprint",sprintReleasePolicy);const sprint=sprintResolved.value;validationWarnings.push(...sprintResolved.warnings);const releaseResolved=resolveCreateSprintOrRelease(unsetKeys,"release",resolvedOptions.release,"release",sprintReleasePolicy);const release=releaseResolved.value;validationWarnings.push(...releaseResolved.warnings);const blockedBy=resolveUnsettableOptionalString(unsetKeys,"blocked_by",resolvedOptions.blockedBy);const blockedByResolution=await resolveCreateBlockedByDependency({pmRoot,settings,typeRegistry,statusRegistry,blockedBy,dependencyValues:dependencies.values,status,statusExplicit:resolvedOptions.status!==void 0,nowValue,author});const dependencyValues=blockedByResolution.dependencyValues;assertDependencyEdgesAllowed(id,dependencyValues);validationWarnings.push(...await assertDependencyTargetsResolvable({pmRoot,dependencies:dependencyValues,idPrefix:settings.id_prefix,itemFormat:settings.item_format,typeToFolder:typeRegistry.type_to_folder,allowUnresolved:resolvedOptions.allowUnresolvedDeps,holders:[{id,createdAt:nowValue}],schema:settings.schema}));status=blockedByResolution.status;const blockedReason=resolveUnsettableOptionalString(unsetKeys,"blocked_reason",resolvedOptions.blockedReason);const unblockNote=resolveUnsettableOptionalString(unsetKeys,"unblock_note",resolvedOptions.unblockNote);const reporter=resolveUnsettableOptionalString(unsetKeys,"reporter",resolvedOptions.reporter);const severity=resolveUnsettableTransformed(unsetKeys,"severity",resolvedOptions.severity,raw=>ensureEnumValue(normalizeSeverityInput(raw),ISSUE_SEVERITY_VALUES,"severity"));const environment=resolveUnsettableOptionalString(unsetKeys,"environment",resolvedOptions.environment);const reproSteps=resolveUnsettableOptionalString(unsetKeys,"repro_steps",resolvedOptions.reproSteps);const resolution=resolveUnsettableOptionalString(unsetKeys,"resolution",resolvedOptions.resolution);const expectedResult=resolveUnsettableOptionalString(unsetKeys,"expected_result",resolvedOptions.expectedResult);const actualResult=resolveUnsettableOptionalString(unsetKeys,"actual_result",resolvedOptions.actualResult);const affectedVersion=resolveUnsettableOptionalString(unsetKeys,"affected_version",resolvedOptions.affectedVersion);const fixedVersion=resolveUnsettableOptionalString(unsetKeys,"fixed_version",resolvedOptions.fixedVersion);const component=resolveUnsettableOptionalString(unsetKeys,"component",resolvedOptions.component);const regression=resolveUnsettableTransformed(unsetKeys,"regression",resolvedOptions.regression,raw=>parseRegressionInput(raw));const customerImpact=resolveUnsettableOptionalString(unsetKeys,"customer_impact",resolvedOptions.customerImpact);const title=requireStringOption(resolvedOptions.title,"--title");const description=resolvedOptions.description??"";const body=resolvedOptions.body??"";const similarityAdvisory=await evaluateSimilarityGovernance({title,description,body},{pmRoot,mode:settings.governance.duplicate_detection_mode,threshold:settings.governance.duplicate_detection_threshold,limit:settings.governance.duplicate_detection_limit,allowDuplicate:resolvedOptions.allowDuplicate});validationWarnings.push(...similarityAdvisoryWarnings(similarityAdvisory));const closeReasonResolution=resolveCreateCloseReason(status,statusRegistry,settings,resolvedOptions,resolution,nowValue);const closeReason=closeReasonResolution.closeReason;const closedAt=status===statusRegistry.close_status?nowValue:void 0;const completedAt=closeReasonResolution.completedAt;validationWarnings.push(...closeReasonResolution.warnings);const itemMetadata=normalizeItemMetadata({id,title,description,type,type_options:validatedTypeOptions.normalized,status,closed_at:closedAt,completed_at:completedAt,close_reason:closeReason,priority,tags,created_at:nowValue,updated_at:nowValue,deadline,assignee,author:authorValue,estimated_minutes:estimatedMinutes,acceptance_criteria:acceptanceCriteria,definition_of_ready:definitionOfReady,order,goal,objective,value,impact,outcome,why_now:whyNow,parent,reviewer,risk,confidence,sprint,release,blocked_by:blockedBy,blocked_reason:blockedReason,unblock_note:unblockNote,reporter,severity,environment,repro_steps:reproSteps,resolution,expected_result:expectedResult,actual_result:actualResult,affected_version:affectedVersion,fixed_version:fixedVersion,component,regression,customer_impact:customerImpact,dependencies:dependencyValues,comments:comments.values,notes:notes.values,learnings:learnings.values,files:files.values,tests:tests.values,docs:docs.values,reminders:reminders.values,events:events.values,...registeredItemFieldValues,...runtimeCreateFieldValues.values});try{applyRegisteredItemFieldDefaultsAndValidation(itemMetadata,extensionRegistrations)}catch(error){throw new PmCliError(error instanceof Error?error.message:"Invalid extension item field values",EXIT_CODE.USAGE)}const afterDocument=canonicalDocument({metadata:itemMetadata,body},{schema:settings.schema,extensionFieldNames});const beforeDocument={metadata:{},body:""};const explicitUnsetKeys=[...explicitUnsets].sort((left,right)=>left.localeCompare(right));const historyMessage=buildHistoryMessage(resolvedOptions.message,explicitUnsetKeys);const changedFields=buildChangedFields(itemMetadata,body,explicitUnsetKeys,[...Object.keys(registeredItemFieldValues),...Object.keys(runtimeCreateFieldValues.values??{})]);const hookWarnings=await writeCreatedItem({pmRoot,type,id,settings,typeRegistry,author,extensionFieldNames,afterDocument,beforeDocument,historyMessage,changedFields,nowValue,similarityCandidate:{title,description,body},allowDuplicate:resolvedOptions.allowDuplicate});const outputItem=structuredClone(itemMetadata);if(createMode==="strict"&&explicitUnsets.has("dependencies")){outputItem.dependencies=[]}const nextTransition=suggestNextLifecycleTransition(id,type,status,statusRegistry);if(createItemLacksSchedule(type,deadline,reminders.values,events.values)){printError(`[pm] warning: ${type} '${id}' has no deadline/reminder/event \u2014 it will not appear on the calendar. Add one via 'pm update ${id} --deadline <ISO>' or 'pm update ${id} --event "start=<ISO>,end=<ISO>"'.`)}return{item:outputItem,changed_fields:changedFields,warnings:[...validationWarnings,...hookWarnings],...Object.fromEntries([["parent_source",parentSource],["next_transition",nextTransition],["similarity_advisory",similarityAdvisory]].filter(entry=>entry[1]!==void 0))}}const _testOnlyCreateCommand={buildHistoryMessage,buildInvalidLogSeedKeysMessage,buildTypeSpecificCreateExample,collectMissingRequiredTypeOptionKeys,createExampleTokensForFlag,filterNonMissingTypeOptionErrors,hasTemplatesShowHandler,hasCreateOptionValue,loadCreateTemplateOptionsFromRuntime,looksLikeStructuredEntry,mergeCreateOptionsWithTemplate,normalizeCreatePolicyOptionKey,normalizeDependencyKindInput,parseDependencies,normalizeExtensionCommandPath,parseCreateUnsetTargets,requireStringOption,readTemplateOptionsFromRuntimeResult,resolveRuntimeCreateUnsetDefinition:(token,registry)=>resolveRuntimeUnsetFieldDefinition(token,"create",registry),typeOptionExampleValue};export{_testOnlyCreateCommand,parseDocs,parseFiles,parseLogSeed,parseTests,requireStringOption,runCreate};
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b72dfe53-b429-5722-aaf3-bc6bbf099d3e")}catch{}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{enforceWorkflowMutation}from"../../core/policy/workflow-policy-store.js";import{assertNoAmbiguousBareCommaEntry,looksLikeStructuredKeyValueEntry,resolveMutationStdinTokenFields}from"../../core/item/parse.js";import{removeFileIfExists,writeFileAtomic,appendHistoryEntry,createHistoryEntry,generateItemId,normalizeItemId,canonicalDocument,normalizeItemMetadata,serializeItemDocument,assertParentReferenceIsNotSelf,isPlaceholderReferenceToken,normalizeParentReferenceValue,validateMissingParentReference,validateSprintOrReleaseValue,assertNoUnknownCsvKeys,looksLikeGenericKeyValueEntry,mergeAdditiveTags,parseCsvKv,parseOptionalNonNegativeInteger,parseOptionalNumber,parseTags,shouldResolveMutationStdinTokens,transferMutationStdinTokenPolicy,resolvePriority,getFocusedItem,normalizeStatusInput,isTerminalStatus,canonicalizeCommandOptionKey,commandOptionFlagLabel,resolveItemTypeRegistry,resolveCommandOptionPolicyState,resolveTypeDefinition,resolveTypeName,validateTypeOptions,acquireLock,printError,buildInvalidTypeError,resolveTypeSynonym,collectRuntimeCreateFieldValues,resolveItemTypesFilePath,resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry,EXIT_CODE,ITEM_METADATA_KEY_ORDER,PmCliError,nowIso,resolveIsoOrRelative,getActiveExtensionRegistrations,projectAfterCommandItemSnapshot,recordAfterCommandAffectedItem,runActiveCommandHandler,runActiveBeforeMutationHooks,runActiveOnWriteHooks,collectRegisteredItemFieldNames,applyRegisteredItemFieldDefaultsAndValidation,parseRegisteredItemFieldAssignments,listAllItemMetadataLight,locateItem,createMutationGuardSdk,getHistoryPath,getItemPath,resolvePmRoot,readSettings,resolveAuthor}from"../runtime-primitives.js";import{requireTerminalReasonWithRecovery}from"../lifecycle-policy.js";import{evaluateSimilarityGovernance,similarityAdvisoryWarnings}from"../similarity.js";import{acquireItemMetadataDerivedIndexLock,refreshItemMetadataDerivedIndex}from"../item-metadata-index.js";import{collectNewOrderingCycleWarnings}from"../graph/mutation-advisory.js";import{assertHierarchyMutationAllowed}from"../graph/hierarchy-integrity.js";import{resolveWorkspaceRelationshipKindRegistry}from"../graph/assembly.js";import{acquireHierarchyMutationLock}from"./hierarchy-mutation-lock.js";import{normalizeRiskInput,normalizeSeverityInput,parseConfidenceInput,parseRegressionInput}from"./metadata-normalizers.js";import{applyLegacyNoneCollectionNormalizers,createLegacyNoneCollectionNormalizers,assertNoLegacyNoneToken,assertNoLegacyNoneTokens,isLegacyNoneToken}from"./legacy-none-tokens.js";import{suggestNextLifecycleTransition}from"./lifecycle-transitions.js";import{parseLinkedTestAssertionEqualsMap,parseLinkedTestAssertionGteMap,parseLinkedTestBoolean,parseLinkedTestContextMode,parseLinkedTestEnvClear,parseLinkedTestEnvSet,parseLinkedTestMinLines,parseLinkedTestRegexList,parseLinkedTestStringList,parseLinkedTestWorkspaceContextMode}from"../test/parsers.js";import{STRUCTURED_LINKED_TEST_KEYS,normalizeStructuredLinkedTestEntry}from"../test/entry.js";import{attachLinkedTestMutationProvenance}from"../test/trust.js";import{COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR,COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR,parseCommandUnsetTargets,resolveRuntimeUnsetFieldDefinition}from"./shared-unset-fields.js";import{ensureEnumValue}from"./recurrence-parsers.js";import{assertDependencyEdgesAllowed,assertDependencyTargetsResolvable,assertValidBareDependencyFlagValue}from"../dependency-flag-validation.js";import{normalizeDependencySeedId,normalizeItemReference,isExternalDependencyReference,normalizeDependencySourceKind}from"../dependency-provenance.js";import{resolveCanonicalRelationshipKind}from"../relationships.js";import{supportsCreateExplicitEmpty}from"../agent/create-option-policy.js";import{parseEventEntries,parseReminderEntries,parseTypeOptionEntries}from"./repeatable-metadata-parsers.js";import{DEPENDENCY_KIND_VALUES,ISSUE_SEVERITY_VALUES,RISK_VALUES,SCOPE_VALUES}from"../../types/index.js";const CREATE_MODE_VALUES=["strict","progressive"],SCHEDULE_CREATE_PRESET_VALUES=["lightweight"],SCHEDULE_CREATE_PRESET_TYPES=new Set(["Reminder","Meeting","Event"]),LOG_SEED_ALLOWED_KEYS=new Set(["author","created_at","text"]),CREATE_UNSET_FIELD_DEFINITIONS=[...COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR,{canonical:"author",aliases:["author"],optionKey:"author",metadataKey:"author"},...COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR],CREATE_UNSET_ALIAS_MAP=(()=>{const map=new Map;for(const definition of CREATE_UNSET_FIELD_DEFINITIONS)for(const alias of definition.aliases)map.set(alias,{optionKey:definition.optionKey,metadataKey:definition.metadataKey});return map})(),CREATE_OPTION_KEY_TO_UNSET_CANONICAL=new Map(CREATE_UNSET_FIELD_DEFINITIONS.map(definition=>[definition.optionKey,definition.canonical])),CREATE_UNSET_SUPPORTED_CANONICAL_FIELDS=CREATE_UNSET_FIELD_DEFINITIONS.map(definition=>definition.canonical).sort((left,right)=>left.localeCompare(right)).join(", ");function buildInvalidLogSeedKeysMessage(optionName,unsupportedKeys){const sortedUnsupported=[...unsupportedKeys].sort((left,right)=>left.localeCompare(right)),keyLabel=sortedUnsupported.length===1?"key":"keys";return`${optionName} supports only author, created_at, and text seed fields. Found unsupported ${keyLabel}: ${sortedUnsupported.join(", ")}. If text contains comma-separated key:value-like fragments, wrap text in quotes (for example text="first,scope:project"), use markdown-style key/value input, or pass ${optionName} - with piped stdin.`}function parseStatusValue(value,statusRegistry){const normalized=normalizeStatusInput(value,statusRegistry);if(!normalized){const allowedStatuses=statusRegistry.definitions.map(definition=>definition.id);throw new PmCliError(`Invalid status value "${value}". Allowed: ${allowedStatuses.join(", ")}`,EXIT_CODE.USAGE)}return normalized}function resolveCreateDefaultStatus(typeDefinition,statusRegistry){const configured=typeDefinition.default_status;if(configured!==void 0){const normalized=normalizeStatusInput(configured,statusRegistry);if(normalized)return normalized}return statusRegistry.open_status}function parseCreatedAt(value,currentIso){if(!value||value.trim()===""||value.trim().toLowerCase()==="now")return currentIso;const parsed=Date.parse(value);if(!Number.isFinite(parsed))throw new PmCliError(`Invalid created_at timestamp "${value}"`,EXIT_CODE.USAGE);return new Date(parsed).toISOString()}const CREATE_LEGACY_NONE_COLLECTION_NORMALIZERS=createLegacyNoneCollectionNormalizers();function normalizeLegacyNoneCreateOptions(options){const normalized={...options,unset:options.unset?[...options.unset]:void 0},appendUnsetTarget=value=>{const current=normalized.unset?[...normalized.unset]:[];current.includes(value)||current.push(value),normalized.unset=current};isLegacyNoneToken(normalized.template)&&(normalized.template=void 0);const scalarOptionKeys=new Set([...CREATE_OPTION_KEY_TO_UNSET_CANONICAL.keys(),"rank"]);for(const optionKey of scalarOptionKeys){const candidate=normalized[optionKey];if(typeof candidate!="string"||!isLegacyNoneToken(candidate))continue;const canonicalUnset=optionKey==="rank"?"order":CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey)??optionKey;appendUnsetTarget(canonicalUnset),normalized[optionKey]=void 0}return transferMutationStdinTokenPolicy(options,applyLegacyNoneCollectionNormalizers(normalized,CREATE_LEGACY_NONE_COLLECTION_NORMALIZERS))}function parseOptionalString(value){if(value!==void 0)return value}function parseCreateUnsetTargets(raw,runtimeFieldRegistry){return parseCommandUnsetTargets({raw,supportedFields:CREATE_UNSET_SUPPORTED_CANONICAL_FIELDS,resolveDefinition:trimmed=>CREATE_UNSET_ALIAS_MAP.get(trimmed)??resolveRuntimeUnsetFieldDefinition(trimmed,"create",runtimeFieldRegistry)})}const DEP_SEED_KEYS=["id","kind","type","author","created_at","source_kind"],LINKED_ARTIFACT_SEED_KEYS=["path","scope","note"];function parseDependencies(raw,nowValue,prefix,fallbackAuthor){return!raw||raw.length===0?{values:void 0,explicitEmpty:!1}:(assertNoLegacyNoneTokens(raw,"--dep","Use --clear-deps to clear dependencies."),{values:raw.map(entry=>{const trimmedEntry=entry.trim(),isStructured=looksLikeStructuredEntry(trimmedEntry,DEP_SEED_KEYS);assertValidBareDependencyFlagValue(trimmedEntry,isStructured);const kv=isStructured?parseCsvKv(entry,"--dep"):{id:trimmedEntry,kind:"related"};isStructured&&assertNoUnknownCsvKeys(kv,"--dep",DEP_SEED_KEYS);const id=parseOptionalString(kv.id),kind=normalizeDependencyKindInput(parseOptionalString(kv.kind??kv.type));if(!id||!kind)throw new PmCliError("--dep requires id and kind, or a bare item id to create a related dependency",EXIT_CODE.USAGE);if(id.trim().toLowerCase()==="undefined")throw new PmCliError(`--dep id must not use placeholder token "${id}". Use --clear-deps to clear dependencies.`,EXIT_CODE.USAGE);const sourceKind=normalizeDependencySourceKind(parseOptionalString(kv.source_kind)),explicitAuthor=parseOptionalString(kv.author);return{id:normalizeDependencySeedId(id,prefix,sourceKind),kind:ensureEnumValue(kind,DEPENDENCY_KIND_VALUES,"dependency kind","kind"),created_at:parseCreatedAt(kv.created_at,nowValue),author:explicitAuthor??fallbackAuthor,source_kind:sourceKind??"cli:create:dep",author_source:explicitAuthor?"asserted":"detected"}}),explicitEmpty:!1})}function normalizeDependencyKindInput(raw){return typeof raw=="string"?resolveCanonicalRelationshipKind(raw)??raw.trim():raw}function looksLikeStructuredEntry(raw,keys){return looksLikeStructuredKeyValueEntry(raw,keys)?!0:looksLikeGenericKeyValueEntry(raw)}function parseLogSeed(optionName,raw,nowValue,fallbackAuthor){return!raw||raw.length===0?{values:void 0,explicitEmpty:!1}:(assertNoLegacyNoneTokens(raw,optionName,optionName==="--comment"?"Use --clear-comments to clear comments.":optionName==="--note"?"Use --clear-notes to clear notes.":"Use --clear-learnings to clear learnings."),{values:raw.map(entry=>{const trimmedEntry=entry.trim(),buildPlainTextCommentSeed=()=>{if(trimmedEntry.length===0)throw new PmCliError(`${optionName} requires text=<value>`,EXIT_CODE.USAGE);return{created_at:nowValue,author:fallbackAuthor,text:trimmedEntry}};let kv;try{kv=parseCsvKv(entry,optionName)}catch(error){if(optionName==="--comment"||optionName==="--note"||optionName==="--learning")return buildPlainTextCommentSeed();throw error}if(Object.keys(kv).filter(key=>!LOG_SEED_ALLOWED_KEYS.has(key)).length>0)return{created_at:parseCreatedAt(kv.created_at,nowValue),author:parseOptionalString(kv.author)??fallbackAuthor,text:trimmedEntry};const text=kv.text??"";if(text==="")throw new PmCliError(`${optionName} requires text=<value>`,EXIT_CODE.USAGE);return{created_at:parseCreatedAt(kv.created_at,nowValue),author:parseOptionalString(kv.author)??fallbackAuthor,text}}),explicitEmpty:!1})}function parseFiles(raw){return!raw||raw.length===0?{values:void 0,explicitEmpty:!1}:(assertNoLegacyNoneTokens(raw,"--file","Use --clear-files to clear linked files."),{values:raw.map(entry=>{const trimmedEntry=entry.trim(),isStructured=looksLikeStructuredEntry(trimmedEntry,LINKED_ARTIFACT_SEED_KEYS);assertNoAmbiguousBareCommaEntry(trimmedEntry,"--file","file path",isStructured);const kv=isStructured?parseCsvKv(entry,"--file"):{path:trimmedEntry};if(isStructured&&assertNoUnknownCsvKeys(kv,"--file",LINKED_ARTIFACT_SEED_KEYS),!kv.path)throw new PmCliError("--file requires path=<value> or a bare file path",EXIT_CODE.USAGE);return{path:kv.path,scope:ensureEnumValue(kv.scope??"project",SCOPE_VALUES,"file scope"),note:parseOptionalString(kv.note)}}),explicitEmpty:!1})}function parseTests(raw){return!raw||raw.length===0?{values:void 0,explicitEmpty:!1}:(assertNoLegacyNoneTokens(raw,"--test","Use --clear-tests to clear linked tests."),{values:raw.map(entry=>{const trimmedEntry=entry.trim(),isStructured=looksLikeStructuredEntry(trimmedEntry,STRUCTURED_LINKED_TEST_KEYS);assertNoAmbiguousBareCommaEntry(trimmedEntry,"--test","test command",isStructured);const kv=isStructured?normalizeStructuredLinkedTestEntry(parseCsvKv(entry,"--test"),"--test"):{command:trimmedEntry},command=parseOptionalString(kv.command),filePath=parseOptionalString(kv.path);if(!command)throw new PmCliError("--test requires command=<value> or a bare command (path=<value> is optional metadata)",EXIT_CODE.USAGE);const timeoutSecondsRaw=parseOptionalString(kv.timeout_seconds),timeoutAliasRaw=parseOptionalString(kv.timeout);if(timeoutSecondsRaw&&timeoutAliasRaw&&timeoutSecondsRaw!==timeoutAliasRaw)throw new PmCliError("--test timeout and timeout_seconds must match when both are provided",EXIT_CODE.USAGE);const timeoutRaw=timeoutSecondsRaw??timeoutAliasRaw;return{command,path:filePath,scope:ensureEnumValue(kv.scope??"project",SCOPE_VALUES,"test scope"),timeout_seconds:timeoutRaw?parseOptionalNumber(timeoutRaw,"timeout_seconds"):void 0,pm_context_mode:parseLinkedTestContextMode(kv.pm_context_mode,"--test"),workspace_context_mode:parseLinkedTestWorkspaceContextMode(kv.workspace_context_mode,"--test"),env_set:parseLinkedTestEnvSet(kv.env_set,"--test"),env_clear:parseLinkedTestEnvClear(kv.env_clear,"--test"),shared_host_safe:parseLinkedTestBoolean(kv.shared_host_safe,"--test","shared_host_safe"),assert_stdout_contains:parseLinkedTestStringList(kv.assert_stdout_contains),assert_stdout_regex:parseLinkedTestRegexList(kv.assert_stdout_regex,"--test","assert_stdout_regex"),assert_stderr_contains:parseLinkedTestStringList(kv.assert_stderr_contains),assert_stderr_regex:parseLinkedTestRegexList(kv.assert_stderr_regex,"--test","assert_stderr_regex"),assert_stdout_min_lines:parseLinkedTestMinLines(kv.assert_stdout_min_lines,"--test"),assert_json_field_equals:parseLinkedTestAssertionEqualsMap(kv.assert_json_field_equals,"--test"),assert_json_field_gte:parseLinkedTestAssertionGteMap(kv.assert_json_field_gte,"--test"),note:parseOptionalString(kv.note)}}),explicitEmpty:!1})}function parseDocs(raw){return!raw||raw.length===0?{values:void 0,explicitEmpty:!1}:(assertNoLegacyNoneTokens(raw,"--doc","Use --clear-docs to clear linked docs."),{values:raw.map(entry=>{const trimmedEntry=entry.trim(),isStructured=looksLikeStructuredEntry(trimmedEntry,LINKED_ARTIFACT_SEED_KEYS),kv=isStructured?parseCsvKv(entry,"--doc"):{path:trimmedEntry};if(isStructured&&assertNoUnknownCsvKeys(kv,"--doc",LINKED_ARTIFACT_SEED_KEYS),!kv.path)throw new PmCliError("--doc requires path=<value> or a bare doc path",EXIT_CODE.USAGE);return{path:kv.path,scope:ensureEnumValue(kv.scope??"project",SCOPE_VALUES,"doc scope"),note:parseOptionalString(kv.note)}}),explicitEmpty:!1})}function parseReminders(raw,nowValue){return!raw||raw.length===0?{values:void 0,explicitEmpty:!1}:(assertNoLegacyNoneTokens(raw,"--reminder","Use --clear-reminders to clear reminders."),{values:parseReminderEntries(raw,new Date(nowValue),{valueMode:"raw"}),explicitEmpty:!1})}function parseEvents(raw,nowValue){return!raw||raw.length===0?{values:void 0,explicitEmpty:!1}:(assertNoLegacyNoneTokens(raw,"--event","Use --clear-events to clear linked events."),{values:parseEventEntries(raw,new Date(nowValue),{allDayEmptyGuard:"defined",recurrenceEmptyNumericGuard:"defined"}),explicitEmpty:!1})}function buildChangedFields(itemMetadata,body,explicitUnsets,additionalItemMetadataKeys=[]){const changed=[...ITEM_METADATA_KEY_ORDER.filter(key=>itemMetadata[key]!==void 0),...additionalItemMetadataKeys.filter(key=>itemMetadata[key]!==void 0),...body.length>0?["body"]:[],...explicitUnsets.map(key=>`unset:${key}`)];return Array.from(new Set(changed))}function buildHistoryMessage(baseMessage,explicitUnsets){const trimmed=baseMessage??"";if(explicitUnsets.length===0)return trimmed;const suffix=`explicit_unset=${explicitUnsets.join(",")}`;return trimmed?`${trimmed} | ${suffix}`:suffix}function normalizeCreatePolicyOptionKey(raw,typeName,sourceLabel){const canonical=canonicalizeCommandOptionKey("create",raw);if(!canonical)throw new PmCliError(`Unsupported ${sourceLabel} entry "${raw}" for type "${typeName}"`,EXIT_CODE.CONFLICT);return canonical}function buildCreateOptionValueLookup(options){return{scalarValues:{title:options.title,description:options.description,type:options.type,status:options.status,priority:options.priority,tags:options.tags,body:options.body,deadline:options.deadline,estimatedMinutes:options.estimatedMinutes,acceptanceCriteria:options.acceptanceCriteria,definitionOfReady:options.definitionOfReady,order:options.order??options.rank,goal:options.goal,objective:options.objective,value:options.value,impact:options.impact,outcome:options.outcome,whyNow:options.whyNow,author:options.author,message:options.message,assignee:options.assignee,parent:options.parent,reviewer:options.reviewer,risk:options.risk,confidence:options.confidence,sprint:options.sprint,release:options.release,blockedBy:options.blockedBy,blockedReason:options.blockedReason,unblockNote:options.unblockNote,reporter:options.reporter,severity:options.severity,environment:options.environment,reproSteps:options.reproSteps,resolution:options.resolution,expectedResult:options.expectedResult,actualResult:options.actualResult,affectedVersion:options.affectedVersion,fixedVersion:options.fixedVersion,component:options.component,regression:options.regression,customerImpact:options.customerImpact},repeatableValues:{dep:options.dep,comment:options.comment,note:options.note,learning:options.learning,file:options.file,test:options.test,doc:options.doc,reminder:options.reminder,event:options.event,typeOption:options.typeOption,field:options.field},addTags:options.addTags}}function hasCreateOptionValue(lookup,optionKey){if(optionKey==="tags")return lookup.scalarValues.tags!==void 0||Array.isArray(lookup.addTags)&&lookup.addTags.length>0;if(Object.prototype.hasOwnProperty.call(lookup.scalarValues,optionKey))return lookup.scalarValues[optionKey]!==void 0;if(Object.prototype.hasOwnProperty.call(lookup.repeatableValues,optionKey)){const value=lookup.repeatableValues[optionKey];return Array.isArray(value)&&value.length>0}return!1}function buildRequiredCreateOptions(typeDefinition,createMode){const requiredOptions=new Set(["title","type"]);if(createMode!=="strict")return requiredOptions;for(const field of typeDefinition.required_create_fields)requiredOptions.add(normalizeCreatePolicyOptionKey(field,typeDefinition.name,"required_create_fields"));for(const field of typeDefinition.required_create_repeatables)requiredOptions.add(normalizeCreatePolicyOptionKey(field,typeDefinition.name,"required_create_repeatables"));return requiredOptions}function assertNoDisabledCreateOptions(disabledOptions,lookup,clearOptionKeys,typeName){for(const option of disabledOptions)if(!(!hasCreateOptionValue(lookup,option)&&!clearOptionKeys.has(option)))throw new PmCliError(`Option ${commandOptionFlagLabel("create",option)} is disabled for type "${typeName}" by command_option_policies`,EXIT_CODE.USAGE)}function assertNoStrictRequiredOptionClears(requiredOptions,createMode,clearOptionKeys){if(createMode!=="strict")return;const strictRequiredClears=requiredOptions.filter(required=>clearOptionKeys.has(required)&&!supportsCreateExplicitEmpty(required));if(strictRequiredClears.length===0)return;const requiredFlags=[...new Set(strictRequiredClears.map(required=>commandOptionFlagLabel("create",required)))].sort((left,right)=>left.localeCompare(right));throw new PmCliError(`Strict create mode requires concrete values for ${requiredFlags.join(", ")}; --unset/--clear-* directives cannot satisfy required options`,EXIT_CODE.USAGE)}function parseTypeOptions(raw){return!raw||raw.length===0?{values:void 0,explicitEmpty:!1}:(assertNoLegacyNoneTokens(raw,"--type-option","Use --clear-type-options to clear existing type options."),{values:parseTypeOptionEntries(raw),explicitEmpty:!1})}async function resolveCreateStdinInputs(options){return await resolveMutationStdinTokenFields(options,[["body","--body"],["description","--description"]],[["dep","--dep"],["comment","--comment"],["note","--note"],["learning","--learning"],["file","--file"],["test","--test"],["doc","--doc"],["reminder","--reminder"],["event","--event"],["typeOption","--type-option"],["field","--field"]])}async function resolveCreateTransportInputs(options){return shouldResolveMutationStdinTokens(options)?await resolveCreateStdinInputs(options):options}function resolveCreateMode(createMode,defaultMode){if(createMode===void 0)return defaultMode;const normalized=createMode.trim().toLowerCase();if(normalized.length===0)return defaultMode;if(normalized==="strict"||normalized==="progressive")return normalized;throw new PmCliError(`Invalid --create-mode value "${createMode}". Allowed: ${CREATE_MODE_VALUES.join(", ")}`,EXIT_CODE.USAGE)}function resolveScheduleCreatePreset(raw){if(raw===void 0)return;const normalized=raw.trim().toLowerCase();if(normalized.length===0)throw new PmCliError("--schedule-preset must not be empty",EXIT_CODE.USAGE);if(normalized==="lightweight"||normalized==="lite"||normalized==="schedule-lite")return"lightweight";throw new PmCliError(`Invalid --schedule-preset value "${raw}". Allowed: ${SCHEDULE_CREATE_PRESET_VALUES.join(", ")}`,EXIT_CODE.USAGE)}function resolveEffectiveCreateMode(createMode,schedulePreset,defaultMode){const resolvedMode=resolveCreateMode(createMode,defaultMode);if(schedulePreset===void 0)return resolvedMode;if(typeof createMode=="string"&&createMode.trim().length>0&&resolvedMode==="strict")throw new PmCliError("--schedule-preset lightweight cannot be combined with --create-mode strict. Use --create-mode progressive or omit --create-mode.",EXIT_CODE.USAGE);return"progressive"}function requireCreateOptionByType(typeDefinition,options,createMode,clearOptionKeys){const typeName=typeDefinition.name,optionLookup=buildCreateOptionValueLookup(options),baseRequiredOptions=buildRequiredCreateOptions(typeDefinition,createMode),policyState=resolveCommandOptionPolicyState(typeDefinition,"create",baseRequiredOptions);if(policyState.errors.length>0)throw new PmCliError(policyState.errors.join("; "),EXIT_CODE.CONFLICT);assertNoDisabledCreateOptions(policyState.disabled,optionLookup,clearOptionKeys,typeName),assertNoStrictRequiredOptionClears(policyState.required,createMode,clearOptionKeys);const satisfiesRequiredOption=optionKey=>optionKey==="status"&&typeDefinition.default_status!==void 0||clearOptionKeys.has(optionKey)&&supportsCreateExplicitEmpty(optionKey)?!0:hasCreateOptionValue(optionLookup,optionKey),missingRequiredOptions=policyState.required.filter(required=>!satisfiesRequiredOption(required));return[...new Set(missingRequiredOptions.map(required=>commandOptionFlagLabel("create",required)))].sort((left,right)=>left.localeCompare(right))}const MISSING_REQUIRED_TYPE_OPTION_PATTERN=/^Missing required type option "([^"]+)" for type "([^"]+)"$/;function collectMissingRequiredTypeOptionKeys(errors,typeName){const missingKeys=[];for(const error of errors){const match=error.match(MISSING_REQUIRED_TYPE_OPTION_PATTERN);match&&match[2]===typeName&&missingKeys.push(match[1])}return[...new Set(missingKeys)].sort((left,right)=>left.localeCompare(right))}function filterNonMissingTypeOptionErrors(errors,typeName){return errors.filter(error=>{const match=error.match(MISSING_REQUIRED_TYPE_OPTION_PATTERN);return!match||match[2]!==typeName})}function assertNoInvalidTypeOptions(errors,type,typeDefinition,statusRegistry){const nonMissingTypeOptionErrors=filterNonMissingTypeOptionErrors(errors,type);if(nonMissingTypeOptionErrors.length===0)return;const nextValidExample=buildTypeSpecificCreateExample(typeDefinition,[],[],statusRegistry.open_status);throw new PmCliError(nonMissingTypeOptionErrors.join("; "),EXIT_CODE.USAGE,{code:"invalid_argument_value",required:`Provide valid --type-option key/value pairs for type "${type}".`,examples:[nextValidExample],nextSteps:[`Run "pm create --help --type ${type}" to review allowed type-option keys and values.`]})}function typeOptionExampleValue(typeDefinition,key){const firstAllowed=typeDefinition.options.find(option=>option.key===key)?.values[0];return typeof firstAllowed=="string"&&firstAllowed.trim().length>0?firstAllowed:"<value>"}function createExampleTokensForFlag(flag,typeName,openStatus){switch(flag){case"--title":return["--title",`"${typeName} example title"`];case"--description":return["--description",`"${typeName} example description"`];case"--type":return["--type",typeName];case"--status":return["--status",openStatus];case"--priority":return["--priority","1"];case"--message":return["--message",`"Create ${typeName} item"`];case"--dep":return["--dep",'"id=pm-xxxx,kind=related,author=maintainer,created_at=now"'];case"--comment":return["--comment",'"author=maintainer,created_at=now,text=Implementation context"'];case"--note":return["--note",'"author=maintainer,created_at=now,text=Design note"'];case"--learning":return["--learning",'"author=maintainer,created_at=now,text=Durable lesson"'];case"--file":return["--file",'"path=src/example.ts,note=implementation file"'];case"--test":return["--test",'"command=node scripts/run-tests.mjs test,timeout_seconds=240"'];case"--doc":return["--doc",'"path=README.md,note=reference doc"'];default:return[flag,'"<value>"']}}function buildTypeSpecificCreateExample(typeDefinition,missingCreateFlags,missingTypeOptionKeys,openStatus){const tokens=["pm","create","--title",`"${typeDefinition.name} example title"`,"--description",`"${typeDefinition.name} example description"`,"--type",typeDefinition.name],optionalRecommendationFlags=["--status","--priority","--message"],orderedFlags=[...new Set([...optionalRecommendationFlags,...missingCreateFlags])],includedFlags=new Set(["--title","--description","--type"]);for(const flag of orderedFlags)includedFlags.has(flag)||(tokens.push(...createExampleTokensForFlag(flag,typeDefinition.name,openStatus)),includedFlags.add(flag));for(const key of missingTypeOptionKeys){const value=typeOptionExampleValue(typeDefinition,key);tokens.push("--type-option",`${key}=${value}`)}return tokens.join(" ")}function requireStringOption(value,flag){const normalized=value?.trim();if(!normalized)throw flag==="--title"?value!==void 0?new PmCliError("Title cannot be empty or whitespace-only. Retry: pass a non-empty title with --title.",EXIT_CODE.USAGE):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):new PmCliError(`Missing required option ${flag}`,EXIT_CODE.USAGE);return normalized}function mergeCreateOptionsWithTemplate(templateOptions,explicitOptions){const merged={};for(const[key,value]of Object.entries(templateOptions))merged[key]=Array.isArray(value)?[...value]:value;for(const[key,value]of Object.entries(explicitOptions))value!==void 0&&(merged[key]=Array.isArray(value)?[...value]:value);return merged}function normalizeExtensionCommandPath(command){return command.trim().toLowerCase().split(/\s+/).filter(part=>part.length>0).join(" ")}function hasTemplatesShowHandler(){const registrations=getActiveExtensionRegistrations();return registrations?registrations.commands.some(entry=>entry.action==="templates-show"||normalizeExtensionCommandPath(entry.command)==="templates show"):!1}function readTemplateOptionsFromRuntimeResult(result,templateName){if(typeof result!="object"||result===null||!("options"in result))throw new PmCliError(`Templates package returned invalid payload for template "${templateName}". Expected an options object.`,EXIT_CODE.GENERIC_FAILURE);const options=result.options;if(typeof options!="object"||options===null||Array.isArray(options))throw new PmCliError(`Templates package returned invalid options for template "${templateName}".`,EXIT_CODE.GENERIC_FAILURE);const normalized={};for(const[key,value]of Object.entries(options)){if(typeof value=="string"||typeof value=="number"||typeof value=="boolean"){normalized[key]=value;continue}if(Array.isArray(value)&&value.every(entry=>typeof entry=="string")){normalized[key]=[...value];continue}throw new PmCliError(`Templates package returned unsupported option value for "${key}" in template "${templateName}".`,EXIT_CODE.GENERIC_FAILURE)}return normalized}async function loadCreateTemplateOptionsFromRuntime(templateName,global2,pmRoot){if(!hasTemplatesShowHandler())throw new PmCliError("--template requires the templates package. Install it first (for example: pm install templates --project).",EXIT_CODE.USAGE);const handlerResult=await runActiveCommandHandler({command:"templates show",args:[templateName],options:{},global:global2,pm_root:pmRoot});if(!handlerResult.handled){const warningSuffix=handlerResult.warnings.length>0?` (${handlerResult.warnings.join(", ")})`:"";throw new PmCliError(`Unable to resolve template "${templateName}" via templates package. Run "pm templates show ${templateName}" for details.${warningSuffix}`,EXIT_CODE.USAGE)}return readTemplateOptionsFromRuntimeResult(handlerResult.result,templateName)}function resolveUnsettableOptionalString(unsetKeys,metadataKey,raw){return unsetKeys.has(metadataKey)||raw===void 0?void 0:parseOptionalString(raw)}function resolveUnsettableTransformed(unsetKeys,metadataKey,raw,transform){return unsetKeys.has(metadataKey)||raw===void 0?void 0:transform(raw)}const CALENDAR_RELEVANT_CREATE_TYPES=new Set(["milestone","meeting","reminder","event"]);function createItemLacksSchedule(type,deadline,reminders,events){const hasDeadline=deadline!==void 0,hasReminders=reminders!==void 0&&reminders.length>0,hasEvents=events!==void 0&&events.length>0;return CALENDAR_RELEVANT_CREATE_TYPES.has(type.toLowerCase())&&!hasDeadline&&!hasReminders&&!hasEvents}function collectCreateScheduleWarnings(type,id,deadline,reminders,events){const warnings=[];return type.toLowerCase()==="event"&&(events===void 0||events.length===0)&&warnings.push(`event_without_schedule:${id}:no_time_set`),createItemLacksSchedule(type,deadline,reminders,events)&&warnings.push(`calendar_item_without_schedule:${id}:no_deadline_or_reminder_or_event (hint: set --deadline <ISO> or --reminder "<when>", or link an Event via --event "start=<ISO>,end=<ISO>"; otherwise this item never appears on pm calendar)`),warnings}async function inheritFocusedParent(parent,resolvedOptions,unsetKeys,pmRoot){if(parent!==void 0||unsetKeys.has("parent")||resolvedOptions.parent!==void 0)return{parent,parentSource:void 0};const focused=await getFocusedItem(pmRoot);return focused===void 0?{parent,parentSource:void 0}:{parent:focused,parentSource:"focus"}}async function validateCreateParentReference(pmRoot,settings,typeRegistry,itemId,parent,policy){const normalized=normalizeItemReference(normalizeParentReferenceValue(parent),settings.id_prefix);if(isExternalDependencyReference(normalized))return{parent:normalized,warnings:[]};if(assertParentReferenceIsNotSelf(itemId,normalized,settings.id_prefix),await locateItem(pmRoot,normalized,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder))return{parent:normalized,warnings:[]};const normalizedParentId=normalizeItemId(normalized,settings.id_prefix);return{parent:normalized,warnings:validateMissingParentReference(normalizedParentId,policy).warnings}}async function resolveCreateParentWithWarnings(params){return params.parent===void 0?{parent:void 0,warnings:[]}:await validateCreateParentReference(params.pmRoot,params.settings,params.typeRegistry,params.itemId,params.parent,params.policy)}async function resolveCreateItemId(params){if(params.explicitId===void 0)return generateItemId(params.pmRoot,params.settings.id_prefix,{tokenLength:params.settings.ids.token_length,typeToFolder:params.typeRegistry.type_to_folder,probeExisting:!1});if(typeof params.explicitId!="string")throw new PmCliError("--id must be a string",EXIT_CODE.USAGE);const trimmedId=params.explicitId.trim();if(trimmedId.length===0||isPlaceholderReferenceToken(trimmedId))throw new PmCliError("--id must not be empty or use a placeholder token",EXIT_CODE.USAGE);const normalizedId=normalizeItemId(trimmedId,params.settings.id_prefix);if(!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(normalizedId))throw new PmCliError("--id must contain only letters, numbers, and dashes after normalization",EXIT_CODE.USAGE);return normalizedId}function resolveCreateSprintOrRelease(unsetKeys,metadataKey,raw,field,policy){const resolved=resolveUnsettableOptionalString(unsetKeys,metadataKey,raw);if(resolved===void 0)return{value:void 0,warnings:[]};const validation=validateSprintOrReleaseValue(field,resolved,policy);return{value:validation.value,warnings:validation.warnings}}async function resolveCreateBlockedByDependency(params){const{pmRoot,settings,typeRegistry,statusRegistry,blockedBy,status,statusExplicit,nowValue,author}=params;let dependencyValues=params.dependencyValues;if(blockedBy===void 0)return{dependencyValues,status};const normalizedBlockedBy=normalizeItemId(blockedBy,settings.id_prefix),blockedByLocated=await locateItem(pmRoot,normalizedBlockedBy,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!blockedByLocated)return{dependencyValues,status};if((dependencyValues??[]).some(dependency=>dependency.id===blockedByLocated.id&&dependency.kind==="blocked_by")||(dependencyValues=[...dependencyValues??[],{id:blockedByLocated.id,kind:"blocked_by",created_at:nowValue,author,source_kind:"cli:create:blocked_by",author_source:"detected"}]),statusExplicit)return{dependencyValues,status};const blockedStatus=statusRegistry.blocked_statuses.has("blocked")?"blocked":[...statusRegistry.blocked_statuses].sort((left,right)=>left.localeCompare(right))[0]??statusRegistry.open_status;return{dependencyValues,status:blockedStatus}}function applyCreateDefaultType(resolvedOptions,settings,typeRegistry){if(typeof resolvedOptions.createMode=="string"&&resolvedOptions.createMode.trim().toLowerCase()==="strict")return;const defaultType=settings.governance.create_default_type?.trim();if(defaultType&&defaultType.length>0&&resolveTypeName(defaultType,typeRegistry)){resolvedOptions.type=defaultType;return}resolveTypeName("Task",typeRegistry)&&(resolvedOptions.type="Task")}function collectTemplateCustomTypeOptions(typeDefinition,resolvedOptions){return typeDefinition.options.filter(option=>canonicalizeCommandOptionKey("create",option.key)===void 0).flatMap(option=>{const value=resolvedOptions[option.key];if(value===void 0)return[];if(typeof value=="string"||typeof value=="number"||typeof value=="boolean")return[option];throw new PmCliError(`Template custom type option "${option.key}" must be a string, number, or boolean value`,EXIT_CODE.USAGE)})}async function resolveCreateTypeSelection(options,global2,pmRoot,settings,typeRegistry){let resolvedOptions=options;const warnings=[];if(resolvedOptions.template!==void 0){const templateName=resolvedOptions.template.trim();if(templateName.length===0)throw new PmCliError("--template must not be empty. Omit --template to disable template usage.",EXIT_CODE.USAGE);const templateOptions=await loadCreateTemplateOptionsFromRuntime(templateName,global2,pmRoot);resolvedOptions=normalizeLegacyNoneCreateOptions(mergeCreateOptionsWithTemplate(templateOptions,resolvedOptions))}if(resolvedOptions.type===void 0&&applyCreateDefaultType(resolvedOptions,settings,typeRegistry),resolvedOptions.type===void 0)throw new PmCliError("Missing required option --type <value>",EXIT_CODE.USAGE);let resolvedTypeName=resolveTypeName(resolvedOptions.type,typeRegistry);if(!resolvedTypeName){const synonymCanonical=resolveTypeSynonym(resolvedOptions.type),synonymResolved=synonymCanonical?resolveTypeName(synonymCanonical,typeRegistry):void 0;if(synonymResolved)warnings.push(`type_coercion:${resolvedOptions.type.trim()}:${synonymResolved}`),resolvedOptions.type=synonymResolved,resolvedTypeName=synonymResolved;else throw new PmCliError(buildInvalidTypeError(resolvedOptions.type,typeRegistry.types,resolveItemTypesFilePath(pmRoot,settings.schema)),EXIT_CODE.USAGE)}const typeDefinition=resolveTypeDefinition(resolvedTypeName,typeRegistry);if(!typeDefinition)throw new PmCliError(`Invalid type value "${resolvedOptions.type}"`,EXIT_CODE.USAGE);const type=typeDefinition.name,matchedTemplateTypeOptions=collectTemplateCustomTypeOptions(typeDefinition,resolvedOptions),templateTypeOptions=matchedTemplateTypeOptions.map(option=>`${option.key}=${String(resolvedOptions[option.key])}`);if(templateTypeOptions.length>0){resolvedOptions.typeOption=[...templateTypeOptions,...resolvedOptions.typeOption??[]];for(const option of matchedTemplateTypeOptions)delete resolvedOptions[option.key]}const schedulePreset=resolveScheduleCreatePreset(resolvedOptions.schedulePreset);if(schedulePreset!==void 0&&!SCHEDULE_CREATE_PRESET_TYPES.has(type))throw new PmCliError(`--schedule-preset ${schedulePreset} is only supported for Reminder, Meeting, or Event types`,EXIT_CODE.USAGE);const createMode=resolveEffectiveCreateMode(resolvedOptions.createMode,schedulePreset,settings.governance.create_mode_default);return{resolvedOptions,typeDefinition,type,schedulePreset,createMode,warnings}}function collectCreateClearTargets(resolvedOptions,unsetTargets){const explicitUnsets=new Set(unsetTargets.metadataKeys),clearOptionKeys=new Set(unsetTargets.optionKeys),clearCollectionDefinitions=[{enabled:resolvedOptions.clearDeps,optionKey:"dep",clearFlag:"--clear-deps",valueFlag:"--dep",values:resolvedOptions.dep,metadataKey:"dependencies"},{enabled:resolvedOptions.clearComments,optionKey:"comment",clearFlag:"--clear-comments",valueFlag:"--comment",values:resolvedOptions.comment,metadataKey:"comments"},{enabled:resolvedOptions.clearNotes,optionKey:"note",clearFlag:"--clear-notes",valueFlag:"--note",values:resolvedOptions.note,metadataKey:"notes"},{enabled:resolvedOptions.clearLearnings,optionKey:"learning",clearFlag:"--clear-learnings",valueFlag:"--learning",values:resolvedOptions.learning,metadataKey:"learnings"},{enabled:resolvedOptions.clearFiles,optionKey:"file",clearFlag:"--clear-files",valueFlag:"--file",values:resolvedOptions.file,metadataKey:"files"},{enabled:resolvedOptions.clearTests,optionKey:"test",clearFlag:"--clear-tests",valueFlag:"--test",values:resolvedOptions.test,metadataKey:"tests"},{enabled:resolvedOptions.clearDocs,optionKey:"doc",clearFlag:"--clear-docs",valueFlag:"--doc",values:resolvedOptions.doc,metadataKey:"docs"},{enabled:resolvedOptions.clearReminders,optionKey:"reminder",clearFlag:"--clear-reminders",valueFlag:"--reminder",values:resolvedOptions.reminder,metadataKey:"reminders"},{enabled:resolvedOptions.clearEvents,optionKey:"event",clearFlag:"--clear-events",valueFlag:"--event",values:resolvedOptions.event,metadataKey:"events"},{enabled:resolvedOptions.clearTypeOptions,optionKey:"typeOption",clearFlag:"--clear-type-options",valueFlag:"--type-option",values:resolvedOptions.typeOption,metadataKey:"type_options"}];for(const definition of clearCollectionDefinitions)if(definition.enabled){if(definition.values&&definition.values.length>0)throw new PmCliError(`Cannot combine ${definition.clearFlag} with ${definition.valueFlag}`,EXIT_CODE.USAGE);explicitUnsets.add(definition.metadataKey),clearOptionKeys.add(definition.optionKey)}return{explicitUnsets,clearOptionKeys}}function assertNoCreateScalarUnsetConflicts(resolvedOptions,unsetTargets){const scalarOptionPresence={tags:resolvedOptions.tags!==void 0,deadline:resolvedOptions.deadline!==void 0,estimatedMinutes:resolvedOptions.estimatedMinutes!==void 0,acceptanceCriteria:resolvedOptions.acceptanceCriteria!==void 0,definitionOfReady:resolvedOptions.definitionOfReady!==void 0,order:resolvedOptions.order!==void 0||resolvedOptions.rank!==void 0,goal:resolvedOptions.goal!==void 0,objective:resolvedOptions.objective!==void 0,value:resolvedOptions.value!==void 0,impact:resolvedOptions.impact!==void 0,outcome:resolvedOptions.outcome!==void 0,whyNow:resolvedOptions.whyNow!==void 0,author:resolvedOptions.author!==void 0,assignee:resolvedOptions.assignee!==void 0,parent:resolvedOptions.parent!==void 0,reviewer:resolvedOptions.reviewer!==void 0,risk:resolvedOptions.risk!==void 0,confidence:resolvedOptions.confidence!==void 0,sprint:resolvedOptions.sprint!==void 0,release:resolvedOptions.release!==void 0,blockedBy:resolvedOptions.blockedBy!==void 0,blockedReason:resolvedOptions.blockedReason!==void 0,unblockNote:resolvedOptions.unblockNote!==void 0,reporter:resolvedOptions.reporter!==void 0,severity:resolvedOptions.severity!==void 0,environment:resolvedOptions.environment!==void 0,reproSteps:resolvedOptions.reproSteps!==void 0,resolution:resolvedOptions.resolution!==void 0,expectedResult:resolvedOptions.expectedResult!==void 0,actualResult:resolvedOptions.actualResult!==void 0,affectedVersion:resolvedOptions.affectedVersion!==void 0,fixedVersion:resolvedOptions.fixedVersion!==void 0,component:resolvedOptions.component!==void 0,regression:resolvedOptions.regression!==void 0,customerImpact:resolvedOptions.customerImpact!==void 0};for(const[optionKey,hasValue]of Object.entries(scalarOptionPresence)){if(!hasValue||!unsetTargets.optionKeys.has(optionKey))continue;const unsetField=CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey)??optionKey;throw new PmCliError(`Cannot combine --unset ${unsetField} with ${commandOptionFlagLabel("create",optionKey)}`,EXIT_CODE.USAGE)}}function assertNoLegacyCreateScalarTokens(resolvedOptions){const assertNoLegacyScalarToken=(value,optionKey)=>{const unsetField=CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey),hint=unsetField?`Use --unset ${unsetField} to clear this field.`:void 0;assertNoLegacyNoneToken(value,commandOptionFlagLabel("create",optionKey),hint)};assertNoLegacyScalarToken(resolvedOptions.tags,"tags"),assertNoLegacyScalarToken(resolvedOptions.deadline,"deadline"),assertNoLegacyScalarToken(resolvedOptions.estimatedMinutes,"estimatedMinutes"),assertNoLegacyScalarToken(resolvedOptions.acceptanceCriteria,"acceptanceCriteria"),assertNoLegacyScalarToken(resolvedOptions.definitionOfReady,"definitionOfReady"),assertNoLegacyScalarToken(resolvedOptions.order??resolvedOptions.rank,"order"),assertNoLegacyScalarToken(resolvedOptions.goal,"goal"),assertNoLegacyScalarToken(resolvedOptions.objective,"objective"),assertNoLegacyScalarToken(resolvedOptions.value,"value"),assertNoLegacyScalarToken(resolvedOptions.impact,"impact"),assertNoLegacyScalarToken(resolvedOptions.outcome,"outcome"),assertNoLegacyScalarToken(resolvedOptions.whyNow,"whyNow"),assertNoLegacyScalarToken(resolvedOptions.author,"author"),assertNoLegacyScalarToken(resolvedOptions.assignee,"assignee"),assertNoLegacyScalarToken(resolvedOptions.parent,"parent"),assertNoLegacyScalarToken(resolvedOptions.reviewer,"reviewer"),assertNoLegacyScalarToken(resolvedOptions.risk,"risk"),assertNoLegacyScalarToken(resolvedOptions.confidence,"confidence"),assertNoLegacyScalarToken(resolvedOptions.sprint,"sprint"),assertNoLegacyScalarToken(resolvedOptions.release,"release"),assertNoLegacyScalarToken(resolvedOptions.blockedBy,"blockedBy"),assertNoLegacyScalarToken(resolvedOptions.blockedReason,"blockedReason"),assertNoLegacyScalarToken(resolvedOptions.unblockNote,"unblockNote"),assertNoLegacyScalarToken(resolvedOptions.reporter,"reporter"),assertNoLegacyScalarToken(resolvedOptions.severity,"severity"),assertNoLegacyScalarToken(resolvedOptions.environment,"environment"),assertNoLegacyScalarToken(resolvedOptions.reproSteps,"reproSteps"),assertNoLegacyScalarToken(resolvedOptions.resolution,"resolution"),assertNoLegacyScalarToken(resolvedOptions.expectedResult,"expectedResult"),assertNoLegacyScalarToken(resolvedOptions.actualResult,"actualResult"),assertNoLegacyScalarToken(resolvedOptions.affectedVersion,"affectedVersion"),assertNoLegacyScalarToken(resolvedOptions.fixedVersion,"fixedVersion"),assertNoLegacyScalarToken(resolvedOptions.component,"component"),assertNoLegacyScalarToken(resolvedOptions.regression,"regression"),assertNoLegacyScalarToken(resolvedOptions.customerImpact,"customerImpact")}function assertNoCreateFieldUnsetConflicts(registeredItemFieldValues,runtimeCreateFieldValues,unsetTargets){for(const fieldKey of Object.keys(registeredItemFieldValues))if(unsetTargets.metadataKeys.has(fieldKey))throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_","-")} with --field ${fieldKey}=...`,EXIT_CODE.USAGE);for(const fieldKey of Object.keys(runtimeCreateFieldValues.values??{}))if(unsetTargets.metadataKeys.has(fieldKey))throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_","-")} with its value flag`,EXIT_CODE.USAGE)}const CLEAR_FLAG_BY_REQUIRED_CREATE_FLAG={"--comment":"--clear-comments","--dep":"--clear-deps","--doc":"--clear-docs","--event":"--clear-events","--file":"--clear-files","--learning":"--clear-learnings","--note":"--clear-notes","--reminder":"--clear-reminders","--test":"--clear-tests","--type-option":"--clear-type-options"};function assertNoMissingRequiredCreateOptions(params){const{combinedMissingFlags,typeDefinition,missingRequiredCreateFlags,missingRequiredTypeOptionKeys,openStatus,type,createMode,missingRequiredRuntimeFields}=params;if(combinedMissingFlags.length===0)return;const runtimeFieldSyntax=missingRequiredRuntimeFields.map(field=>{const placeholder=field.type==="boolean"?"<true|false>":field.type==="array"?"<json-array>":field.type==="object"?"<json-object>":field.type==="number"?"<number>":field.type==="string_array"||field.repeatable?"<value>":"<string>";return{example:`--${field.cli_flag} ${placeholder}`,description:`--${field.cli_flag} maps to ${field.metadata_key} (${field.type}${field.repeatable?", repeatable":""})`}}),nextValidExample=[buildTypeSpecificCreateExample(typeDefinition,missingRequiredCreateFlags,missingRequiredTypeOptionKeys,openStatus),...runtimeFieldSyntax.map(field=>field.example)].join(" "),nextSteps=[`Run "pm create --help --type ${type}" for type-aware required option guidance.`,...combinedMissingFlags.filter(flag=>flag==="--title").map(()=>'Title can also be passed as the first positional argument (example: pm create "Your title" --type '+type+").")];createMode==="strict"&&(nextSteps.push('For staged onboarding, retry with "--create-mode progressive".'),SCHEDULE_CREATE_PRESET_TYPES.has(type)&&nextSteps.push('For minimal scheduling inputs, try "--schedule-preset lightweight".')),runtimeFieldSyntax.length>0&&nextSteps.push(`Required custom field formats: ${runtimeFieldSyntax.map(field=>field.description).join("; ")}.`);const collectionClearFlags=[...new Set(combinedMissingFlags.flatMap(flag=>{const normalizedFlag=flag.split(" ",1)[0],clearFlag=CLEAR_FLAG_BY_REQUIRED_CREATE_FLAG[normalizedFlag];return clearFlag?[clearFlag]:[]}))];collectionClearFlags.length>0&&nextSteps.push(`If the truthful value is an empty collection, use ${collectionClearFlags.join(", ")} instead of inventing metadata.`);const errorMessage=combinedMissingFlags.length===1?`Missing required option ${combinedMissingFlags[0]} for type "${type}"`:`Missing required options ${combinedMissingFlags.join(", ")} for type "${type}"`;throw new PmCliError(errorMessage,EXIT_CODE.USAGE,{code:"missing_required_option",required:`Provide all required create options and type options for type "${type}" in one invocation.`,examples:[...collectionClearFlags.map(flag=>`pm create --type ${type} ${flag} ...`),nextValidExample],nextSteps,recovery:createMode==="strict"?{recovery_mode:"compact",missing_required_fields:combinedMissingFlags,suggested_flags:[...collectionClearFlags,...combinedMissingFlags,"--create-mode progressive"]}:void 0})}function resolveCreateTags(unsetKeys,resolvedOptions){if(unsetKeys.has("tags")&&Array.isArray(resolvedOptions.addTags)&&resolvedOptions.addTags.length>0)throw new PmCliError("Cannot combine --unset tags with --add-tags",EXIT_CODE.USAGE);const baseTags=unsetKeys.has("tags")?[]:resolvedOptions.tags!==void 0?parseTags(resolvedOptions.tags):[];return mergeAdditiveTags(baseTags,resolvedOptions.addTags)}function resolveCreateOrder(unsetKeys,resolvedOptions){if(resolvedOptions.order!==void 0&&resolvedOptions.rank!==void 0&&resolvedOptions.order!==resolvedOptions.rank)throw new PmCliError("--order and --rank must match when both are provided",EXIT_CODE.USAGE);const orderRaw=resolvedOptions.order??resolvedOptions.rank,order=resolveUnsettableTransformed(unsetKeys,"order",orderRaw,raw=>parseOptionalNumber(raw,"order"));if(order!==void 0&&!Number.isInteger(order))throw new PmCliError("Order must be an integer",EXIT_CODE.USAGE);return order}function resolveCreateCloseReason(status,statusRegistry,settings,resolvedOptions,resolution,nowValue){if(resolvedOptions.completedAt!==void 0&&status!==statusRegistry.close_status)throw new PmCliError("--completed-at requires a terminal create status.",EXIT_CODE.USAGE);const completedAt=status!==statusRegistry.close_status?void 0:resolvedOptions.completedAt===void 0?nowValue:resolveIsoOrRelative(resolvedOptions.completedAt,new Date(nowValue),"completed-at");if(status!==statusRegistry.close_status)return{closeReason:void 0,completedAt,warnings:[]};const reasonInput=settings.governance.require_close_reason?{explicit:resolvedOptions.closeReason??resolvedOptions.message,resolution}:{explicit:resolvedOptions.closeReason};return{closeReason:requireTerminalReasonWithRecovery(reasonInput,settings.governance.require_close_reason,{operation:"create",status}).closeReason,completedAt,warnings:[]}}async function writeCreatedItem(params){const{pmRoot,type,id,settings,typeRegistry,author,extensionFieldNames,afterDocument,beforeDocument,historyMessage,changedFields,nowValue,similarityCandidate,allowDuplicate}=params,itemPath=getItemPath(pmRoot,type,id,settings.item_format,typeRegistry.type_to_folder),historyPath=getHistoryPath(pmRoot,id),relationshipRegistry=resolveWorkspaceRelationshipKindRegistry(),hierarchyMutationRequired=afterDocument.metadata.parent!==void 0||(afterDocument.metadata.dependencies??[]).some(dependency=>relationshipRegistry.resolve(dependency.kind)?.hierarchy),hierarchyLockRelease=await acquireHierarchyMutationLock({pmRoot,author,ttlSeconds:settings.locks.ttl_seconds,waitMs:settings.locks.wait_ms,required:hierarchyMutationRequired});let hierarchyLockHeld=hierarchyMutationRequired,hookWarnings=[];try{const lockRelease=await acquireLock(pmRoot,id,settings.locks.ttl_seconds,author,!1,settings.governance.force_required_for_stale_lock,settings.locks.wait_ms);try{const graphBeforeCreate=afterDocument.metadata.parent!==void 0||afterDocument.metadata.dependencies!==void 0&&afterDocument.metadata.dependencies.length>0?await listAllItemMetadataLight(pmRoot,settings.item_format,typeRegistry.type_to_folder,void 0,settings.schema):void 0;if(await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder))throw new PmCliError(`Item "${id}" already exists`,EXIT_CODE.CONFLICT);if(graphBeforeCreate){const statusRegistry=resolveRuntimeStatusRegistry(settings.schema);assertHierarchyMutationAllowed(graphBeforeCreate,[...graphBeforeCreate,afterDocument.metadata],id,status=>isTerminalStatus(status,statusRegistry),relationshipRegistry)}const workflowPolicy=await enforceWorkflowMutation({pmRoot,settings,operation:"create",author,before:null,after:afterDocument});await runActiveBeforeMutationHooks({pm_root:pmRoot,operation:"create",before:null,after:afterDocument,changed_fields:changedFields,sdk:createMutationGuardSdk({pmRoot,settings,typeToFolder:typeRegistry.type_to_folder})});const releaseDerivedIndexLock=await acquireItemMetadataDerivedIndexLock(pmRoot,author,{required:settings.governance.duplicate_detection_mode==="strict"&&allowDuplicate!==!0});let derivedIndexWarnings=[];try{settings.governance.duplicate_detection_mode==="strict"&&allowDuplicate!==!0&&await evaluateSimilarityGovernance(similarityCandidate,{pmRoot,mode:"strict",threshold:settings.governance.duplicate_detection_threshold,limit:settings.governance.duplicate_detection_limit,allowDuplicate:!1}),await writeFileAtomic(itemPath,serializeItemDocument(afterDocument,{format:settings.item_format,schema:settings.schema,extensionFieldNames}));try{const entry=createHistoryEntry({nowIso:nowValue,author,op:"create",before:beforeDocument,after:afterDocument,message:historyMessage,context:workflowPolicy.decisions.length===0?void 0:{workflow_policies:workflowPolicy.decisions}});await appendHistoryEntry(historyPath,entry)}catch(error){throw await removeFileIfExists(itemPath),error}hierarchyLockHeld&&(await hierarchyLockRelease(),hierarchyLockHeld=!1),derivedIndexWarnings=await refreshItemMetadataDerivedIndex({pmRoot,preferredFormat:settings.item_format,typeToFolder:typeRegistry.type_to_folder,schema:settings.schema,itemPath,document:afterDocument})}finally{await releaseDerivedIndexLock()}hookWarnings=[...workflowPolicy.warnings,...graphBeforeCreate?collectNewOrderingCycleWarnings(graphBeforeCreate,[...graphBeforeCreate,afterDocument.metadata],id):[],...derivedIndexWarnings,...await runActiveOnWriteHooks({path:itemPath,scope:"project",op:"create",item_id:afterDocument.metadata.id,item_type:afterDocument.metadata.type,before:beforeDocument,after:afterDocument,changed_fields:changedFields}),...await runActiveOnWriteHooks({path:historyPath,scope:"project",op:"create:history",item_id:afterDocument.metadata.id,item_type:afterDocument.metadata.type,before:beforeDocument,after:afterDocument,changed_fields:changedFields})],recordAfterCommandAffectedItem({id:afterDocument.metadata.id,op:"create",item_type:afterDocument.metadata.type,status:afterDocument.metadata.status,current:projectAfterCommandItemSnapshot(afterDocument.metadata,changedFields),changed_fields:changedFields})}finally{await lockRelease()}}finally{hierarchyLockHeld&&await hierarchyLockRelease()}return hookWarnings}async function runCreate(options,global2){let resolvedOptions=normalizeLegacyNoneCreateOptions(await resolveCreateTransportInputs(options));const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),statusRegistry=resolveRuntimeStatusRegistry(settings.schema),runtimeFieldRegistry=resolveRuntimeFieldRegistry(settings.schema),typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()),typeSelection=await resolveCreateTypeSelection(resolvedOptions,global2,pmRoot,settings,typeRegistry);resolvedOptions=typeSelection.resolvedOptions;const{typeDefinition,type,createMode}=typeSelection,unsetTargets=parseCreateUnsetTargets(resolvedOptions.unset,runtimeFieldRegistry),{explicitUnsets,clearOptionKeys}=collectCreateClearTargets(resolvedOptions,unsetTargets);assertNoCreateScalarUnsetConflicts(resolvedOptions,unsetTargets),assertNoLegacyCreateScalarTokens(resolvedOptions);const missingRequiredCreateFlags=requireCreateOptionByType(typeDefinition,resolvedOptions,createMode,clearOptionKeys),nowValue=nowIso(),author=resolveAuthor(parseOptionalString(resolvedOptions.author),settings.author_default),dependencies=parseDependencies(resolvedOptions.dep,nowValue,settings.id_prefix,author),comments=parseLogSeed("--comment",resolvedOptions.comment,nowValue,author),notes=parseLogSeed("--note",resolvedOptions.note,nowValue,author),learnings=parseLogSeed("--learning",resolvedOptions.learning,nowValue,author),files=parseFiles(resolvedOptions.file),tests=parseTests(resolvedOptions.test);tests.values=await attachLinkedTestMutationProvenance(tests.values,author,nowValue);const docs=parseDocs(resolvedOptions.doc),reminders=parseReminders(resolvedOptions.reminder,nowValue),events=parseEvents(resolvedOptions.event,nowValue),typeOptions=parseTypeOptions(resolvedOptions.typeOption),validatedTypeOptions=validateTypeOptions(type,typeOptions.values,typeRegistry),extensionRegistrations=getActiveExtensionRegistrations(),extensionFieldNames=collectRegisteredItemFieldNames(extensionRegistrations),registeredItemFieldValues=parseRegisteredItemFieldAssignments(resolvedOptions.field,extensionRegistrations),runtimeCreateFieldValues=collectRuntimeCreateFieldValues(resolvedOptions,runtimeFieldRegistry,type),missingRequiredRuntimeFlagSet=new Set(runtimeCreateFieldValues.missing_required_flags),missingRequiredRuntimeFields=runtimeFieldRegistry.definitions.filter(field=>missingRequiredRuntimeFlagSet.has(`--${field.cli_flag}`));assertNoCreateFieldUnsetConflicts(registeredItemFieldValues,runtimeCreateFieldValues,unsetTargets);const missingRequiredTypeOptionKeys=collectMissingRequiredTypeOptionKeys(validatedTypeOptions.errors,type),missingRequiredTypeOptionFlags=missingRequiredTypeOptionKeys.map(key=>`--type-option ${key}=<value>`),combinedMissingFlags=[...new Set([...missingRequiredCreateFlags,...missingRequiredTypeOptionFlags,...runtimeCreateFieldValues.missing_required_flags])].sort((left,right)=>left.localeCompare(right));assertNoMissingRequiredCreateOptions({combinedMissingFlags,typeDefinition,missingRequiredCreateFlags,missingRequiredTypeOptionKeys,openStatus:statusRegistry.open_status,type,createMode,missingRequiredRuntimeFields}),assertNoInvalidTypeOptions(validatedTypeOptions.errors,type,typeDefinition,statusRegistry);const id=await resolveCreateItemId({pmRoot,settings,typeRegistry,explicitId:resolvedOptions.id});let status=resolvedOptions.status!==void 0?parseStatusValue(resolvedOptions.status,statusRegistry):resolveCreateDefaultStatus(typeDefinition,statusRegistry);const priority=resolvedOptions.priority!==void 0?resolvePriority(resolvedOptions.priority):2,unsetKeys=unsetTargets.metadataKeys,tags=resolveCreateTags(unsetKeys,resolvedOptions),deadline=resolveUnsettableTransformed(unsetKeys,"deadline",resolvedOptions.deadline,raw=>resolveIsoOrRelative(raw,new Date(nowValue),"deadline")),estimatedMinutes=resolveUnsettableTransformed(unsetKeys,"estimated_minutes",resolvedOptions.estimatedMinutes,raw=>parseOptionalNonNegativeInteger(raw,"estimated-minutes")),acceptanceCriteria=resolveUnsettableOptionalString(unsetKeys,"acceptance_criteria",resolvedOptions.acceptanceCriteria),definitionOfReady=resolveUnsettableOptionalString(unsetKeys,"definition_of_ready",resolvedOptions.definitionOfReady),order=resolveCreateOrder(unsetKeys,resolvedOptions),goal=resolveUnsettableOptionalString(unsetKeys,"goal",resolvedOptions.goal),objective=resolveUnsettableOptionalString(unsetKeys,"objective",resolvedOptions.objective),value=resolveUnsettableOptionalString(unsetKeys,"value",resolvedOptions.value),impact=resolveUnsettableOptionalString(unsetKeys,"impact",resolvedOptions.impact),outcome=resolveUnsettableOptionalString(unsetKeys,"outcome",resolvedOptions.outcome),whyNow=resolveUnsettableOptionalString(unsetKeys,"why_now",resolvedOptions.whyNow),assignee=resolveUnsettableOptionalString(unsetKeys,"assignee",resolvedOptions.assignee),authorValue=unsetKeys.has("author")?void 0:parseOptionalString(resolvedOptions.author)??author,initialParent=resolveUnsettableOptionalString(unsetKeys,"parent",resolvedOptions.parent),inheritedParent=await inheritFocusedParent(initialParent,resolvedOptions,unsetKeys,pmRoot);let parent=inheritedParent.parent;const parentSource=inheritedParent.parentSource,reviewer=resolveUnsettableOptionalString(unsetKeys,"reviewer",resolvedOptions.reviewer),risk=resolveUnsettableTransformed(unsetKeys,"risk",resolvedOptions.risk,raw=>ensureEnumValue(normalizeRiskInput(raw),RISK_VALUES,"risk")),confidence=resolveUnsettableTransformed(unsetKeys,"confidence",resolvedOptions.confidence,raw=>parseConfidenceInput(raw)),parentReferencePolicy=resolvedOptions.allowMissingParent===!0&&settings.validation.parent_reference==="strict_error"?"warn":settings.validation.parent_reference,sprintReleasePolicy=settings.validation.sprint_release_format,validationWarnings=[...typeSelection.warnings,...collectCreateScheduleWarnings(type,id,deadline,reminders.values,events.values)],parentValidation=await resolveCreateParentWithWarnings({itemId:id,parent,pmRoot,settings,typeRegistry,policy:parentReferencePolicy});parent=parentValidation.parent,validationWarnings.push(...parentValidation.warnings);const sprintResolved=resolveCreateSprintOrRelease(unsetKeys,"sprint",resolvedOptions.sprint,"sprint",sprintReleasePolicy),sprint=sprintResolved.value;validationWarnings.push(...sprintResolved.warnings);const releaseResolved=resolveCreateSprintOrRelease(unsetKeys,"release",resolvedOptions.release,"release",sprintReleasePolicy),release=releaseResolved.value;validationWarnings.push(...releaseResolved.warnings);const blockedBy=resolveUnsettableOptionalString(unsetKeys,"blocked_by",resolvedOptions.blockedBy),blockedByResolution=await resolveCreateBlockedByDependency({pmRoot,settings,typeRegistry,statusRegistry,blockedBy,dependencyValues:dependencies.values,status,statusExplicit:resolvedOptions.status!==void 0,nowValue,author}),dependencyValues=blockedByResolution.dependencyValues;assertDependencyEdgesAllowed(id,dependencyValues),validationWarnings.push(...await assertDependencyTargetsResolvable({pmRoot,dependencies:dependencyValues,idPrefix:settings.id_prefix,itemFormat:settings.item_format,typeToFolder:typeRegistry.type_to_folder,allowUnresolved:resolvedOptions.allowUnresolvedDeps,holders:[{id,createdAt:nowValue}],schema:settings.schema})),status=blockedByResolution.status;const blockedReason=resolveUnsettableOptionalString(unsetKeys,"blocked_reason",resolvedOptions.blockedReason),unblockNote=resolveUnsettableOptionalString(unsetKeys,"unblock_note",resolvedOptions.unblockNote),reporter=resolveUnsettableOptionalString(unsetKeys,"reporter",resolvedOptions.reporter),severity=resolveUnsettableTransformed(unsetKeys,"severity",resolvedOptions.severity,raw=>ensureEnumValue(normalizeSeverityInput(raw),ISSUE_SEVERITY_VALUES,"severity")),environment=resolveUnsettableOptionalString(unsetKeys,"environment",resolvedOptions.environment),reproSteps=resolveUnsettableOptionalString(unsetKeys,"repro_steps",resolvedOptions.reproSteps),resolution=resolveUnsettableOptionalString(unsetKeys,"resolution",resolvedOptions.resolution),expectedResult=resolveUnsettableOptionalString(unsetKeys,"expected_result",resolvedOptions.expectedResult),actualResult=resolveUnsettableOptionalString(unsetKeys,"actual_result",resolvedOptions.actualResult),affectedVersion=resolveUnsettableOptionalString(unsetKeys,"affected_version",resolvedOptions.affectedVersion),fixedVersion=resolveUnsettableOptionalString(unsetKeys,"fixed_version",resolvedOptions.fixedVersion),component=resolveUnsettableOptionalString(unsetKeys,"component",resolvedOptions.component),regression=resolveUnsettableTransformed(unsetKeys,"regression",resolvedOptions.regression,raw=>parseRegressionInput(raw)),customerImpact=resolveUnsettableOptionalString(unsetKeys,"customer_impact",resolvedOptions.customerImpact),title=requireStringOption(resolvedOptions.title,"--title"),description=resolvedOptions.description??"",body=resolvedOptions.body??"",similarityAdvisory=await evaluateSimilarityGovernance({title,description,body},{pmRoot,mode:settings.governance.duplicate_detection_mode,threshold:settings.governance.duplicate_detection_threshold,limit:settings.governance.duplicate_detection_limit,allowDuplicate:resolvedOptions.allowDuplicate});validationWarnings.push(...similarityAdvisoryWarnings(similarityAdvisory));const closeReasonResolution=resolveCreateCloseReason(status,statusRegistry,settings,resolvedOptions,resolution,nowValue),closeReason=closeReasonResolution.closeReason,closedAt=status===statusRegistry.close_status?nowValue:void 0,completedAt=closeReasonResolution.completedAt;validationWarnings.push(...closeReasonResolution.warnings);const itemMetadata=normalizeItemMetadata({id,title,description,type,type_options:validatedTypeOptions.normalized,status,closed_at:closedAt,completed_at:completedAt,close_reason:closeReason,priority,tags,created_at:nowValue,updated_at:nowValue,deadline,assignee,author:authorValue,estimated_minutes:estimatedMinutes,acceptance_criteria:acceptanceCriteria,definition_of_ready:definitionOfReady,order,goal,objective,value,impact,outcome,why_now:whyNow,parent,reviewer,risk,confidence,sprint,release,blocked_by:blockedBy,blocked_reason:blockedReason,unblock_note:unblockNote,reporter,severity,environment,repro_steps:reproSteps,resolution,expected_result:expectedResult,actual_result:actualResult,affected_version:affectedVersion,fixed_version:fixedVersion,component,regression,customer_impact:customerImpact,dependencies:dependencyValues,comments:comments.values,notes:notes.values,learnings:learnings.values,files:files.values,tests:tests.values,docs:docs.values,reminders:reminders.values,events:events.values,...registeredItemFieldValues,...runtimeCreateFieldValues.values});try{applyRegisteredItemFieldDefaultsAndValidation(itemMetadata,extensionRegistrations)}catch(error){throw new PmCliError(error instanceof Error?error.message:"Invalid extension item field values",EXIT_CODE.USAGE)}const afterDocument=canonicalDocument({metadata:itemMetadata,body},{schema:settings.schema,extensionFieldNames}),beforeDocument={metadata:{},body:""},explicitUnsetKeys=[...explicitUnsets].sort((left,right)=>left.localeCompare(right)),historyMessage=buildHistoryMessage(resolvedOptions.message,explicitUnsetKeys),changedFields=buildChangedFields(itemMetadata,body,explicitUnsetKeys,[...Object.keys(registeredItemFieldValues),...Object.keys(runtimeCreateFieldValues.values??{})]),hookWarnings=await writeCreatedItem({pmRoot,type,id,settings,typeRegistry,author,extensionFieldNames,afterDocument,beforeDocument,historyMessage,changedFields,nowValue,similarityCandidate:{title,description,body},allowDuplicate:resolvedOptions.allowDuplicate}),outputItem=structuredClone(itemMetadata);createMode==="strict"&&explicitUnsets.has("dependencies")&&(outputItem.dependencies=[]);const nextTransition=suggestNextLifecycleTransition(id,type,status,statusRegistry);return createItemLacksSchedule(type,deadline,reminders.values,events.values)&&printError(`[pm] warning: ${type} '${id}' has no deadline/reminder/event \u2014 it will not appear on the calendar. Add one via 'pm update ${id} --deadline <ISO>' or 'pm update ${id} --event "start=<ISO>,end=<ISO>"'.`),{item:outputItem,changed_fields:changedFields,warnings:[...validationWarnings,...hookWarnings],...Object.fromEntries([["parent_source",parentSource],["next_transition",nextTransition],["similarity_advisory",similarityAdvisory]].filter(entry=>entry[1]!==void 0))}}const _testOnlyCreateCommand={buildHistoryMessage,buildInvalidLogSeedKeysMessage,buildTypeSpecificCreateExample,collectMissingRequiredTypeOptionKeys,createExampleTokensForFlag,filterNonMissingTypeOptionErrors,hasTemplatesShowHandler,hasCreateOptionValue,loadCreateTemplateOptionsFromRuntime,looksLikeStructuredEntry,mergeCreateOptionsWithTemplate,normalizeCreatePolicyOptionKey,normalizeDependencyKindInput,parseDependencies,normalizeExtensionCommandPath,parseCreateUnsetTargets,requireStringOption,readTemplateOptionsFromRuntimeResult,resolveRuntimeCreateUnsetDefinition:(token,registry)=>resolveRuntimeUnsetFieldDefinition(token,"create",registry),typeOptionExampleValue};export{_testOnlyCreateCommand,parseDocs,parseFiles,parseLogSeed,parseTests,requireStringOption,runCreate};
|
|
2
2
|
//# sourceMappingURL=create.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d29ab3a3-319f-506f-8289-78d786b95255")}catch{}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import path from"node:path";import{toItemRecord,deleteItem,getHistoryPath,resolvePmRoot,readSettings,resolveAuthor}from"../runtime-primitives.js";async function runDelete(id,options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot),author=resolveAuthor(options.author,settings.author_default),result=await deleteItem({pmRoot,settings,id,author,message:options.message,force:options.force,dryRun:options.dryRun}),targetPath=result.targetPath?path.relative(pmRoot,result.targetPath).split(path.sep).join("/"):void 0;return{item:toItemRecord(result.item),changed_fields:result.changedFields,dry_run:options.dryRun===!0,deleted:options.dryRun!==!0,outcome:options.dryRun===!0?"would_delete":"deleted",previous_status:result.item.status,...targetPath?{target_path:targetPath}:{},history_retained:path.relative(pmRoot,getHistoryPath(pmRoot,result.item.id)).split(path.sep).join("/"),tombstone_retention:"retain_append_only",warnings:result.warnings}}export{runDelete};
|
|
2
2
|
//# sourceMappingURL=delete.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3950ef46-cc2b-5b8e-97d6-34c739bd816e")}catch{}})();import{EXIT_CODE,PmCliError,resolveIsoOrRelative}from"../../sdk/runtime-primitives.js";const EVENT_END_AFTER_START_MESSAGE="--event end must be strictly after start. Equal start/end timestamps are treated as an instant event (end is dropped); an end earlier than start is rejected. Omit end for an instant event or set end later than start.",EVENT_END_DURATION_MUTUALLY_EXCLUSIVE_MESSAGE="--event end and duration are mutually exclusive; provide only one (use duration=<relative> like duration=2h, duration=30min, or duration=PT30M, or set an explicit end).",MINUTE_DURATION=/^([+-]?)(\d+)(min|mins|minute|minutes)$/i,ISO_8601_TIME_DURATION=/^([+-]?)[Pp][Tt](?:(\d+)[Hh])?(?:(\d+)[Mm])?(?:(\d+)[Ss])?$/,MILLIS_PER_SECOND=1e3,MILLIS_PER_MINUTE=60*MILLIS_PER_SECOND,MILLIS_PER_HOUR=60*MILLIS_PER_MINUTE;function toIsoTimestampOrThrow(timestampMs,durationRaw){const resolved=new Date(timestampMs);if(!Number.isFinite(resolved.getTime()))throw new PmCliError(`Invalid event.duration value "${durationRaw}". Duration is out of supported timestamp range.`,EXIT_CODE.USAGE);return resolved.toISOString()}function resolveDurationAgainstStart(startAt,durationRaw){const start=new Date(startAt),trimmedDuration=durationRaw.trim();if(/^[+-]?\d+m$/i.test(trimmedDuration))throw new PmCliError(`Event duration "${trimmedDuration}" is ambiguous. Use min for minutes or mo for months (for example 5min or 5mo).`,EXIT_CODE.USAGE);const explicitDuration=trimmedDuration.replace(/^([+-]?\d+)mo$/i,"$1m"),minuteDuration=MINUTE_DURATION.exec(trimmedDuration);if(minuteDuration){const sign=minuteDuration[1]==="-"?-1:1,amount=Number.parseInt(minuteDuration[2],10)*sign;return toIsoTimestampOrThrow(start.getTime()+amount*MILLIS_PER_MINUTE,trimmedDuration)}const isoDuration=ISO_8601_TIME_DURATION.exec(trimmedDuration);if(isoDuration){const[,signToken,hoursToken,minutesToken,secondsToken]=isoDuration;if(hoursToken||minutesToken||secondsToken){const sign=signToken==="-"?-1:1,hours=Number.parseInt(hoursToken??"0",10),minutes=Number.parseInt(minutesToken??"0",10),seconds=Number.parseInt(secondsToken??"0",10),totalMillis=hours*MILLIS_PER_HOUR+minutes*MILLIS_PER_MINUTE+seconds*MILLIS_PER_SECOND;return toIsoTimestampOrThrow(start.getTime()+sign*totalMillis,trimmedDuration)}}const normalizedDuration=explicitDuration.startsWith("+")||explicitDuration.startsWith("-")?explicitDuration:`+${explicitDuration}`;return resolveIsoOrRelative(normalizedDuration,start,"event.duration")}function resolveEventEndAt(startAt,endRaw,durationRaw,referenceDate){if(endRaw&&durationRaw)throw new PmCliError(EVENT_END_DURATION_MUTUALLY_EXCLUSIVE_MESSAGE,EXIT_CODE.USAGE);if(durationRaw){const endAt2=resolveDurationAgainstStart(startAt,durationRaw);if(endAt2<startAt)throw new PmCliError(EVENT_END_AFTER_START_MESSAGE,EXIT_CODE.USAGE);return endAt2===startAt?void 0:endAt2}if(!endRaw)return;const endAt=resolveIsoOrRelative(endRaw,referenceDate,"event.end");if(endAt<startAt)throw new PmCliError(EVENT_END_AFTER_START_MESSAGE,EXIT_CODE.USAGE);if(endAt!==startAt)return endAt}export{EVENT_END_AFTER_START_MESSAGE,EVENT_END_DURATION_MUTUALLY_EXCLUSIVE_MESSAGE,resolveEventEndAt};
|
|
2
2
|
//# sourceMappingURL=event-validation-messages.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c7047beb-5c3a-5d97-acb9-7ddd15a223ec")}catch{}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{getActiveExtensionRegistrations,normalizeItemId,resolveItemTypeRegistry,EXIT_CODE,PmCliError,clearFocusedItem,getFocusedItem,setFocusedItem,buildItemNotFoundError,locateItem,readLocatedItem,resolvePmRoot,readSettings,resolveAuthor,resolveClaimPrincipal}from"../runtime-primitives.js";import{recordFocusSemanticAttribution}from"../context/semantic-session-attribution.js";async function ensureInitialized(pmRoot){await assertInitializedTracker(pmRoot)}async function runFocus(id,options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);if(await ensureInitialized(pmRoot),options.clear===!0){if(id!==void 0)throw new PmCliError("pm focus --clear does not take an item id. Use 'pm focus --clear' to clear focus or 'pm focus <id>' to set it.",EXIT_CODE.USAGE);const settings2=await readSettings(pmRoot),principal=resolveClaimPrincipal(resolveAuthor(void 0,settings2.author_default));return await clearFocusedItem(pmRoot),await recordFocusSemanticAttribution({pmRoot,settings:settings2,principal}),{action:"clear",focused_item:null,title:null,message:"Focus cleared. New items will not inherit a default parent."}}if(id===void 0){const current=await getFocusedItem(pmRoot);if(current===void 0)return{action:"show",focused_item:null,title:null,message:"No focus set. Use 'pm focus <id>' to set a default parent for new items."};const title2=await resolveFocusedTitle(pmRoot,current);return{action:"show",focused_item:current,title:title2,message:`Focused on ${current}${title2?` (${title2})`:""}. New items default --parent to it.`}}const settings=await readSettings(pmRoot),typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()),located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!located)throw await buildItemNotFoundError(pmRoot,id,settings.id_prefix,typeRegistry.type_to_folder);const normalizedId=normalizeItemId(located.id,settings.id_prefix),loaded=await readLocatedItem(located,{schema:settings.schema}),title=nonEmptyTitleOrNull(loaded.document.metadata.title);return await setFocusedItem(pmRoot,normalizedId),await recordFocusSemanticAttribution({pmRoot,settings,principal:resolveClaimPrincipal(resolveAuthor(void 0,settings.author_default)),itemId:normalizedId}),{action:"set",focused_item:normalizedId,title,message:`Focused on ${normalizedId}${title?` (${title})`:""}. New items default --parent to it (override with --parent or clear via 'pm focus --clear').`}}async function resolveFocusedTitle(pmRoot,id){const settings=await readSettings(pmRoot),typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()),located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!located)return null;const loaded=await readLocatedItem(located,{schema:settings.schema});return nonEmptyTitleOrNull(loaded.document.metadata.title)}function nonEmptyTitleOrNull(title){return title.trim().length>0?title:null}export{runFocus};
|
|
2
2
|
//# sourceMappingURL=focus.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5c8f85c4-33c4-5e7d-b01d-b95c8281250d")}catch{}})();import{acquireLock}from"../../core/lock/lock.js";const HIERARCHY_MUTATION_LOCK_ID="hierarchy-integrity";async function acquireHierarchyMutationLock(options){const release=options.required?await acquireLock(options.pmRoot,HIERARCHY_MUTATION_LOCK_ID,options.ttlSeconds,options.author,!1,!1,options.waitMs):async()=>{};let released=!1;return async()=>{released||(released=!0,await release())}}export{acquireHierarchyMutationLock};
|
|
2
2
|
//# sourceMappingURL=hierarchy-mutation-lock.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c22dc1f8-285a-5858-9087-17a8deed6db8")}catch{}})();import{EXIT_CODE,PmCliError}from"../runtime-primitives.js";const LEGACY_NONE_TOKENS=new Set(["none","null"]);function createLegacyNoneCollectionNormalizers(options={}){return[{optionKey:"dep",clearFlagKey:"clearDeps",valueFlag:"--dep",clearFlag:"--clear-deps",...options.depDisableFlagKey===void 0?{}:{disableFlagKey:options.depDisableFlagKey}},{optionKey:"comment",clearFlagKey:"clearComments",valueFlag:"--comment",clearFlag:"--clear-comments"},{optionKey:"note",clearFlagKey:"clearNotes",valueFlag:"--note",clearFlag:"--clear-notes"},{optionKey:"learning",clearFlagKey:"clearLearnings",valueFlag:"--learning",clearFlag:"--clear-learnings"},{optionKey:"file",clearFlagKey:"clearFiles",valueFlag:"--file",clearFlag:"--clear-files",...options.fileDisableFlagKey===void 0?{}:{disableFlagKey:options.fileDisableFlagKey}},{optionKey:"test",clearFlagKey:"clearTests",valueFlag:"--test",clearFlag:"--clear-tests",...options.testDisableFlagKey===void 0?{}:{disableFlagKey:options.testDisableFlagKey}},{optionKey:"doc",clearFlagKey:"clearDocs",valueFlag:"--doc",clearFlag:"--clear-docs",...options.docDisableFlagKey===void 0?{}:{disableFlagKey:options.docDisableFlagKey}},{optionKey:"reminder",clearFlagKey:"clearReminders",valueFlag:"--reminder",clearFlag:"--clear-reminders"},{optionKey:"event",clearFlagKey:"clearEvents",valueFlag:"--event",clearFlag:"--clear-events"},{optionKey:"typeOption",clearFlagKey:"clearTypeOptions",valueFlag:"--type-option",clearFlag:"--clear-type-options"}]}function isLegacyNoneToken(value){return value===void 0?!1:LEGACY_NONE_TOKENS.has(value.trim().toLowerCase())}function assertNoLegacyNoneToken(value,flag,replacementHint){if(!isLegacyNoneToken(value))return;const suffix=replacementHint?` ${replacementHint}`:"";throw new PmCliError(`${flag} no longer accepts "none" or "null".${suffix}`.trim(),EXIT_CODE.USAGE)}function assertNoLegacyNoneTokens(values,flag,replacementHint){if(!values||values.length===0||!values.some(value=>isLegacyNoneToken(value)))return;const suffix=replacementHint?` ${replacementHint}`:"";throw new PmCliError(`${flag} no longer accepts "none" or "null".${suffix}`.trim(),EXIT_CODE.USAGE)}function applyLegacyNoneCollectionNormalizers(normalized,definitions){for(const definition of definitions){const candidate=normalized[definition.optionKey];if(!Array.isArray(candidate)||candidate.length===0)continue;if(!candidate.every(entry=>typeof entry=="string"))throw new PmCliError(`${definition.valueFlag} entries must be strings.`,EXIT_CODE.USAGE);const entries=candidate;if(entries.some(entry=>isLegacyNoneToken(entry))){if(entries.filter(entry=>!isLegacyNoneToken(entry)).length>0)throw new PmCliError(`Cannot mix legacy clear token "none"/"null" with concrete ${definition.valueFlag} entries. Use ${definition.clearFlag} to clear or provide explicit entries.`,EXIT_CODE.USAGE);normalized[definition.optionKey]=void 0,normalized[definition.clearFlagKey]=!0,definition.disableFlagKey&&(normalized[definition.disableFlagKey]=!1)}}return normalized}export{applyLegacyNoneCollectionNormalizers,assertNoLegacyNoneToken,assertNoLegacyNoneTokens,createLegacyNoneCollectionNormalizers,isLegacyNoneToken};
|
|
2
2
|
//# sourceMappingURL=legacy-none-tokens.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="daa816a5-05d4-5e0a-90aa-9d96afdb2117")}catch{}})();import{normalizeStatusInputWithRegistry}from"../runtime-primitives.js";const NON_WORKABLE_TYPES=new Set(["event","meeting","reminder","milestone","decision","adr"]);function suggestNextLifecycleTransition(id,type,status,statusRegistry){if(NON_WORKABLE_TYPES.has(type.trim().toLowerCase())||status!==statusRegistry.open_status)return;const inProgress=normalizeStatusInputWithRegistry("in_progress",statusRegistry);if(!(inProgress===void 0||inProgress===statusRegistry.open_status))return{command:`pm claim ${id} --start`,to_status:inProgress}}export{suggestNextLifecycleTransition};
|
|
2
2
|
//# sourceMappingURL=lifecycle-transitions.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="140b50c9-b0b3-5446-8ef9-5993bf4d830c")}catch{}})();import{projectMutationResult}from"../../core/output/mutation-projection.js";import{PmCliError}from"../../core/shared/errors.js";import{runClose}from"./close.js";import{runReopen}from"./reopen.js";import{runClaim,runClaimNext,runRelease}from"./claim.js";import{runStartTask,runPauseTask,runCloseTask}from"./task-composition.js";import{readRuntimeString,withMutationCompaction,mutationOptionsWithOverrides}from"../runtime-input.js";async function runMcpClaimAction(context){const{changedFields,idOnly,runnerOptions}=withMutationCompaction(context.args,context.options),force=context.force===!0||runnerOptions.force===!0,selectionOptions={...context.args,...runnerOptions};if(selectionOptions.start===!0)return runMcpTaskCompositionAction(context,"start_task");const result=context.args.next===!0||runnerOptions.next===!0?await runClaimNext(force,context.global,selectionOptions,selectionOptions):await runClaim(requireLifecycleItemId(context,runnerOptions),force,context.global,selectionOptions);return projectMutationResult(result,{changedFields,compactEnvelope:changedFields==="compact"&&!idOnly,idOnly})}function requireLifecycleItemId(context,options){const id=context.id??readRuntimeString(options,"id");if(!id)throw new PmCliError("Missing required argument: id",64);return id}function readLifecycleReason(context,options){return readRuntimeString(context.args,"reason")??readRuntimeString(context.args,"text")??readRuntimeString(options,"reason")??readRuntimeString(options,"text")}async function runMcpCloseAction(context){const{changedFields,idOnly,runnerOptions}=withMutationCompaction(context.args,context.options);return runnerOptions.releaseAssignment===!0?runMcpTaskCompositionAction(context,"close_task"):projectMutationResult(await runClose(requireLifecycleItemId(context,runnerOptions),readLifecycleReason(context,runnerOptions),{...runnerOptions,force:context.force===!0||runnerOptions.force===!0},context.global),{changedFields,compactEnvelope:changedFields==="compact"&&!idOnly,idOnly})}async function runMcpTaskCompositionAction(context,action){const{changedFields,idOnly,runnerOptions}=withMutationCompaction(context.args,context.options),id=requireLifecycleItemId(context,runnerOptions),options=mutationOptionsWithOverrides(runnerOptions,{force:context.force===!0||runnerOptions.force===!0}),result=action==="start_task"?await runStartTask(id,options,context.global):action==="pause_task"?await runPauseTask(id,options,context.global):await runCloseTask(id,readLifecycleReason(context,runnerOptions),options,context.global);return projectMutationResult(result,{changedFields,idOnly,compactEnvelope:changedFields==="compact"&&!idOnly})}async function runMcpReleaseAction(context){if(context.options.pause===!0)return runMcpTaskCompositionAction(context,"pause_task");const{changedFields,idOnly,runnerOptions}=withMutationCompaction(context.args,context.options),result=await runRelease(requireLifecycleItemId(context,runnerOptions),context.force===!0,context.global,runnerOptions);return projectMutationResult(result,{changedFields,idOnly,compactEnvelope:changedFields==="compact"&&!idOnly})}async function runMcpReopenAction(context){const{changedFields,idOnly,runnerOptions}=withMutationCompaction(context.args,context.options);return projectMutationResult(await runReopen(requireLifecycleItemId(context,runnerOptions),readLifecycleReason(context,runnerOptions)??"",{...runnerOptions,force:context.force===!0||runnerOptions.force===!0},context.global),{changedFields,compactEnvelope:changedFields==="compact"&&!idOnly,idOnly})}export{runMcpClaimAction,runMcpCloseAction,runMcpReleaseAction,runMcpReopenAction,runMcpTaskCompositionAction};
|
|
2
2
|
//# sourceMappingURL=mcp-actions.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="01a312de-88fc-514f-b37b-2e717222a8ed")}catch{}})();import{EXIT_CODE,PmCliError,parseOptionalNumber}from"../runtime-primitives.js";import{CONFIDENCE_TEXT_VALUES}from"../../types/index.js";function normalizeRiskInput(value){const trimmed=value.trim();return trimmed.toLowerCase()==="med"?"medium":trimmed}function normalizeSeverityInput(value){const trimmed=value.trim();return trimmed.toLowerCase()==="med"?"medium":trimmed}function parseConfidenceInput(value){const trimmed=value.trim().toLowerCase();if(trimmed==="med")return"medium";if(CONFIDENCE_TEXT_VALUES.includes(trimmed))return trimmed;const parsed=parseOptionalNumber(value,"confidence");if(!Number.isInteger(parsed)||parsed<0||parsed>100)throw new PmCliError("Confidence must be an integer 0..100 or one of low|med|medium|high",EXIT_CODE.USAGE);return parsed}function parseRegressionInput(value){const normalized=value.trim().toLowerCase();if(normalized==="true"||normalized==="1")return!0;if(normalized==="false"||normalized==="0")return!1;throw new PmCliError("Regression must be one of true|false|1|0",EXIT_CODE.USAGE)}export{normalizeRiskInput,normalizeSeverityInput,parseConfidenceInput,parseRegressionInput};
|
|
2
2
|
//# sourceMappingURL=metadata-normalizers.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6cbf8eac-7a78-5121-bcb7-32dac02bfbd5")}catch{}})();
|
|
2
2
|
//# sourceMappingURL=mutation-command-options.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0a610a47-2af8-51b7-a8ab-2557eaf611e2")}catch{}})();import{quoteCommandArg,renderPmCommand}from"../command-line.js";function buildPlanMutationReceipt(result,pmRoot){const inspectionCommand=renderPmCommand(["plan","show",result.plan.id,"--depth","deep",...pmRoot===void 0?[]:["--pm-path",pmRoot]]);return{kind:"plan_mutation",action:result.action,id:result.plan.id,status:result.plan.status,mode:result.plan.mode,steps_summary:result.plan.steps_summary,...result.step===void 0?{}:{step:{id:result.step.id,order:result.step.order,status:result.step.status}},materialized_count:result.materialized?.length??0,skipped_count:result.materialize_skipped?.length??0,warning_count:result.warnings.length,warnings:result.warnings.slice(0,3).map(warning=>warning.slice(0,160)),warnings_truncated:result.warnings.length>3||result.warnings.some(warning=>warning.length>160),next_action:result.next_actions?.[0]===void 0?inspectionCommand:pmRoot===void 0?result.next_actions[0]:`${result.next_actions[0]} --pm-path ${quoteCommandArg(pmRoot)}`,inspection_command:inspectionCommand,omission_receipt:{has_omissions:!0,omitted_field_group_count:1,omitted_field_groups:[{name:"plan_detail",restore_with:inspectionCommand}]}}}export{buildPlanMutationReceipt};
|
|
2
2
|
//# sourceMappingURL=plan-mutation-receipt.js.map
|