@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]="be171aef-09e7-5f87-9605-1d47ca665440")}catch(e2){}})();import{BUILTIN_ITEM_TYPE_VALUES,STATUS_VALUES}from"../../types/index.js";import{listPmCommandsForTier,resolvePmCommandVisibilityTier}from"../agent-capability-contracts.js";import{AGGREGATE_FLAG_CONTRACTS,APPEND_FLAG_CONTRACTS,CALENDAR_FLAG_CONTRACTS,CLOSE_MANY_FLAG_CONTRACTS,COMPLETION_FLAG_CONTRACTS,CONTEXT_FLAG_CONTRACTS,CONTRACTS_FLAG_CONTRACTS,COPY_FLAG_CONTRACTS,CREATE_FLAG_CONTRACTS,DEPS_FLAG_CONTRACTS,DUPLICATES_FLAG_CONTRACTS,EVENTS_FLAG_CONTRACTS,EXTENSION_FLAG_CONTRACTS,FOCUS_FLAG_CONTRACTS,GET_FLAG_CONTRACTS,GLOBAL_FLAG_CONTRACTS,GRAPH_FLAG_CONTRACTS,GUIDE_FLAG_CONTRACTS,HEALTH_FLAG_CONTRACTS,HISTORY_AUTHOR_ACKNOWLEDGE_FLAG_CONTRACTS,HISTORY_FLAG_CONTRACTS,INIT_FLAG_CONTRACTS,LIST_FILTER_FLAG_CONTRACTS,MEET_FLAG_CONTRACTS,NEXT_FLAG_CONTRACTS,PACKAGE_FLAG_CONTRACTS,PLAN_FLAG_CONTRACTS,PM_COMMAND_ALIAS_CONTRACTS,PM_NAMESPACED_COMMAND_ALIASES,REMIND_FLAG_CONTRACTS,SEARCH_FLAG_CONTRACTS,STATS_FLAG_CONTRACTS,UPDATE_FLAG_CONTRACTS,UPDATE_MANY_FLAG_CONTRACTS,UPGRADE_FLAG_CONTRACTS,resolvePmCommandOperation,resolveSubcommandFlagContractsForCommand,toCompletionFlagString}from"../cli-contracts.js";import{GLOBAL_VALUE_CONSUMING_FLAGS}from"../cli-contracts/bootstrap-command-scanner.js";import{WORKFLOW_POLICY_ACTIONS}from"../cli-contracts/enum-contracts.js";import{PM_COMMAND_DESTINATION_CONTRACTS}from"../cli-contracts/grammar-contracts.js";import{enrichCliFlagInvocationContracts}from"../flag-invocation-contracts.js";import{listGuideTopicIds}from"../guide-topics.js";const DEFAULT_ITEM_TYPES=[...BUILTIN_ITEM_TYPE_VALUES];const DEFAULT_STATUS_VALUES=[...STATUS_VALUES];const HIDDEN_COMMAND_ALIASES=new Set(PM_COMMAND_ALIAS_CONTRACTS.filter(contract=>contract.hidden).map(contract=>contract.alias));const ALL_COMMANDS=listPmCommandsForTier("full").filter(command=>!command.includes(" ")&&!HIDDEN_COMMAND_ALIASES.has(command));const LIST_FLAGS=toCompletionFlagString(LIST_FILTER_FLAG_CONTRACTS);const AGGREGATE_FLAGS=toCompletionFlagString(AGGREGATE_FLAG_CONTRACTS);const APPEND_FLAGS=toCompletionFlagString(APPEND_FLAG_CONTRACTS);const COPY_FLAGS=toCompletionFlagString(COPY_FLAG_CONTRACTS);const RESTORE_INVOCATIONS=enrichCliFlagInvocationContracts("restore",resolveSubcommandFlagContractsForCommand("restore"));const ATTEST_INVOCATIONS=enrichCliFlagInvocationContracts("history-attest",resolveSubcommandFlagContractsForCommand("history-attest"));const FOCUS_FLAGS=toCompletionFlagString(FOCUS_FLAG_CONTRACTS);const MEET_FLAGS=toCompletionFlagString(MEET_FLAG_CONTRACTS);const REMIND_FLAGS=toCompletionFlagString(REMIND_FLAG_CONTRACTS);const CREATE_FLAGS=toCompletionFlagString(CREATE_FLAG_CONTRACTS);const GET_FLAGS=toCompletionFlagString(GET_FLAG_CONTRACTS);const UPDATE_FLAGS=toCompletionFlagString(UPDATE_FLAG_CONTRACTS);const UPDATE_MANY_FLAGS=toCompletionFlagString(UPDATE_MANY_FLAG_CONTRACTS);const CLOSE_MANY_FLAGS=toCompletionFlagString(CLOSE_MANY_FLAG_CONTRACTS);const NAMESPACE_NOUNS=[...new Set(PM_NAMESPACED_COMMAND_ALIASES.map(entry=>entry.canonical_argv[0]))];const NAMESPACE_PREFIXES=[...new Set(PM_NAMESPACED_COMMAND_ALIASES.flatMap(entry=>entry.canonical_argv.slice(0,-1).map((_,index)=>entry.canonical_argv.slice(0,index+1).join(" "))))];const PACKAGE_NAMESPACE_OPERATIONS=new Set(PM_COMMAND_DESTINATION_CONTRACTS.filter(entry=>entry.disposition==="package_owned").map(entry=>resolvePmCommandOperation(entry.command)));const HISTORY_COMPLETION_ALIASES=PM_NAMESPACED_COMMAND_ALIASES.filter(entry=>entry.canonical_argv[0]==="history");const HISTORY_LEAVES=HISTORY_COMPLETION_ALIASES.map(entry=>entry.canonical_argv[1]).join(" ");function completionNamespaceLeaves(runtime){const available=new Set((runtime.namespace_commands??[]).map(resolvePmCommandOperation));const aliases=PM_NAMESPACED_COMMAND_ALIASES.filter(entry=>resolvePmCommandVisibilityTier(entry.canonical)!=="internal"&&(!PACKAGE_NAMESPACE_OPERATIONS.has(entry.alias)||available.has(entry.alias)));return Object.fromEntries(NAMESPACE_PREFIXES.map(prefix=>[prefix,[...new Set(aliases.filter(entry=>entry.canonical.startsWith(`${prefix} `)).map(entry=>entry.canonical_argv[prefix.split(" ").length]))].join(" ")]))}const HISTORY_OPERATION_FLAGS=HISTORY_COMPLETION_ALIASES.map(entry=>({...entry,flags:toCompletionFlagString(resolveSubcommandFlagContractsForCommand(entry.alias))}));const HISTORY_FLAGS=toCompletionFlagString(HISTORY_FLAG_CONTRACTS);const HISTORY_AUTHOR_ACKNOWLEDGE_FLAGS=toCompletionFlagString(HISTORY_AUTHOR_ACKNOWLEDGE_FLAG_CONTRACTS,false);const EVENTS_FLAGS=toCompletionFlagString(EVENTS_FLAG_CONTRACTS);const CALENDAR_FLAGS=toCompletionFlagString(CALENDAR_FLAG_CONTRACTS);const CONTEXT_FLAGS=toCompletionFlagString(CONTEXT_FLAG_CONTRACTS);const NEXT_FLAGS=toCompletionFlagString(NEXT_FLAG_CONTRACTS);const DEPS_FLAGS=toCompletionFlagString(DEPS_FLAG_CONTRACTS);const DUPLICATES_FLAGS=toCompletionFlagString(DUPLICATES_FLAG_CONTRACTS);const GRAPH_FLAGS=toCompletionFlagString(GRAPH_FLAG_CONTRACTS);const GUIDE_FLAGS=toCompletionFlagString(GUIDE_FLAG_CONTRACTS);const SEARCH_FLAGS=toCompletionFlagString(SEARCH_FLAG_CONTRACTS);const STATS_FLAGS=toCompletionFlagString(STATS_FLAG_CONTRACTS);const HEALTH_FLAGS=toCompletionFlagString(HEALTH_FLAG_CONTRACTS);const INIT_FLAGS=toCompletionFlagString(INIT_FLAG_CONTRACTS);const CONTRACTS_FLAGS=toCompletionFlagString(CONTRACTS_FLAG_CONTRACTS);const PLAN_FLAGS=toCompletionFlagString(PLAN_FLAG_CONTRACTS);const SCHEMA_SUBCOMMAND_CHOICES=`${WORKFLOW_POLICY_ACTIONS.join(" ")} list show show-status add-type remove-type add-status remove-status add-field remove-field list-fields show-field apply-preset rename-type rename-field remap-status`;const PLAN_SUBCOMMANDS_LIST="create show add-step update-step complete-step block-step reorder-step remove-step link unlink decision discovery validation resume approve materialize";const COMPLETION_FLAGS=toCompletionFlagString(COMPLETION_FLAG_CONTRACTS);const COMPLETION_SHELL_CHOICES=`${COMPLETION_FLAGS} bash zsh fish`;const GUIDE_TOPIC_CHOICES=joinCompletionValues(listGuideTopicIds());const EXTENSION_LIFECYCLE_ACTIONS="init scaffold install uninstall explore manage describe reload doctor catalog adopt adopt-all activate deactivate migrate";const PACKAGE_LIFECYCLE_ACTIONS=`${EXTENSION_LIFECYCLE_ACTIONS} upgrade`;const EXTENSION_LIFECYCLE_FLAGS=toCompletionFlagString(EXTENSION_FLAG_CONTRACTS);const PACKAGE_LIFECYCLE_FLAGS=toCompletionFlagString(PACKAGE_FLAG_CONTRACTS);const UPGRADE_FLAGS=toCompletionFlagString(UPGRADE_FLAG_CONTRACTS);const MUTATION_FLAGS="--author --message --force --json --quiet --no-changed-fields --id-only --pm-path --path --no-extensions --no-pager --profile --help";const DELETE_MUTATION_FLAGS="--dry-run --author --message --force --json --quiet --no-changed-fields --id-only --pm-path --path --no-extensions --no-pager --profile --help";const CLOSE_MUTATION_FLAGS=toCompletionFlagString(resolveSubcommandFlagContractsForCommand("close"));const CLOSE_TASK_MUTATION_FLAGS=toCompletionFlagString(resolveSubcommandFlagContractsForCommand("close-task"));const RELEASE_MUTATION_FLAGS=toCompletionFlagString(resolveSubcommandFlagContractsForCommand("release"));const CLAIM_MUTATION_FLAGS=toCompletionFlagString(resolveSubcommandFlagContractsForCommand("claim"));const COMMAND_COMPLETION_DESCRIPTIONS=[["workspace","Workspace initialization, customization, state and snapshots"],["init","Initialize pm storage for the current workspace"],["config","Read or update pm settings"],["package","Manage package lifecycle operations"],["packages","Alias for package"],["create","Create a new project management item"],["item","Manage item evidence, links, tests, and duplication"],["copy","Copy an existing item to a new ID"],["focus","Set/clear/show the session focused parent for new items"],["list","List active items with optional filters"],["aggregate","Aggregate grouped item counts and numeric stats for governance queries"],["duplicates","Find bounded duplicate clusters across lifecycle statuses"],["guide","Browse local progressive-disclosure guides"],["calendar","Show calendar views for deadlines and reminders"],["cal","Alias for calendar"],["context","Show a token-efficient project context snapshot"],["ctx","Alias for context"],["get","Show item details by ID"],["next","Recommend the next actionable (unblocked, ready) work item"],["search","Search items with keyword, semantic, or hybrid modes"],["reindex","Rebuild search artifacts"],["history","Show item history entries"],["history-compact","Compact history streams into a synthetic baseline + retained tail"],["history-redact","Redact sensitive literals/patterns and recompute history hashes"],["history-repair","Re-anchor a drifted history chain so pm health/validate report ok"],["schema","Manage custom item types and statuses in .agents/pm/schema/*.json"],["profile","List, show, apply, and lint project profiles (archetype schema/config/template/package bundles)"],["plan","Agent-optimized Plan item workflow (create/show/add-step/update-step/complete-step/link/approve/materialize)"],["activity","Show recent activity across items"],["restore","Restore an item to an earlier state"],["update","Update item fields and metadata"],["update-many","Bulk-update matched items with dry-run and rollback checkpoints"],["close","Close an item (reason requirement follows governance settings)"],["close-many","Bulk-close matched items with an optional shared reason and rollback checkpoint"],["delete","Delete an item and record the change"],["append","Append text to an item body"],["comments","List or add comments for an item"],["notes","List or add notes for an item"],["learnings","List or add learnings for an item"],["files","Manage linked files"],["docs","Manage linked docs"],["deps","Show dependency relationships for an item"],["graph","Bounded graph traversal, analytics, and governance-audit queries"],["test","Manage linked tests and optionally run them"],["test-all","Run linked tests across matching items"],["test-runs","Manage background linked-test runs"],["stats","Show project tracker statistics"],["health","Show project tracker health checks"],["validate","Run standalone validation checks"],["gc","Clean optional cache artifacts"],["contracts","Show machine-readable command and schema contracts"],["claim","Claim an item for active work"],["release","Release the active claim for an item"],["start-task","Lifecycle alias to claim and set in_progress"],["pause-task","Lifecycle alias to reopen and release claim"],["close-task","Lifecycle alias to close and release claim"],["meet","Shortcut to create a Meeting with scheduling defaults"],["event","Shortcut to create an Event with scheduling defaults"],["remind","Shortcut to create a Reminder from a point in time"],["templates","Manage reusable create templates"],["completion","Generate shell completion"],["help","Display help for a command"]];const GLOBAL_FLAGS=GLOBAL_FLAG_CONTRACTS.flatMap(entry=>[entry.short,entry.flag,...entry.aliases??[]]).filter(value=>Boolean(value)).join(" ");const GLOBAL_COMPLETION_VALUE_PATTERNS=[...GLOBAL_VALUE_CONSUMING_FLAGS].join("|");const GLOBAL_COMPLETION_INLINE_PATTERNS=[...GLOBAL_VALUE_CONSUMING_FLAGS].map(flag=>`${flag}=*`).join("|");const GLOBAL_COMPLETION_SWITCH_PATTERNS=[...GLOBAL_FLAGS.split(" ").filter(flag=>!GLOBAL_VALUE_CONSUMING_FLAGS.has(flag)),"-h","-V"].join("|");function joinCompletionValues(values){return[...new Set(values.map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right)).join(" ")}function joinCompletionValuesInOrder(values){return[...new Set(values.map(value=>value.trim()).filter(value=>value.length>0))].join(" ")}function shellDoubleQuote(value){return value.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll("$","\\$").replaceAll("`","\\`")}function completionTypeValues(itemTypes,runtime){return joinCompletionValuesInOrder(itemTypes.length>0?itemTypes:runtime.item_types??DEFAULT_ITEM_TYPES)}function completionStatusValues(runtime){return joinCompletionValues(runtime.statuses??DEFAULT_STATUS_VALUES)}function mergeFlagStrings(baseFlags,runtimeFlags){const merged=[...baseFlags.split(/\s+/u).filter(value=>value.length>0),...runtimeFlags??[]];return joinCompletionValues(merged)}function normalizeRuntimeCompletionFlags(runtimeFlags){const normalized=(runtimeFlags??[]).map(value=>value.trim()).filter(value=>value.startsWith("--")&&value.length>2).map(value=>`--${value.slice(2).replaceAll("_","-")}`);return[...new Set(normalized)].sort((left,right)=>left.localeCompare(right))}export{AGGREGATE_FLAGS,ALL_COMMANDS,APPEND_FLAGS,ATTEST_INVOCATIONS,CALENDAR_FLAGS,CLAIM_MUTATION_FLAGS,CLOSE_MANY_FLAGS,CLOSE_MUTATION_FLAGS,CLOSE_TASK_MUTATION_FLAGS,COMMAND_COMPLETION_DESCRIPTIONS,COMPLETION_SHELL_CHOICES,CONTEXT_FLAGS,CONTRACTS_FLAGS,COPY_FLAGS,CREATE_FLAGS,DELETE_MUTATION_FLAGS,DEPS_FLAGS,DUPLICATES_FLAGS,EVENTS_FLAGS,EXTENSION_LIFECYCLE_ACTIONS,EXTENSION_LIFECYCLE_FLAGS,FOCUS_FLAGS,GET_FLAGS,GLOBAL_COMPLETION_INLINE_PATTERNS,GLOBAL_COMPLETION_SWITCH_PATTERNS,GLOBAL_COMPLETION_VALUE_PATTERNS,GLOBAL_FLAGS,GRAPH_FLAGS,GUIDE_FLAGS,GUIDE_TOPIC_CHOICES,HEALTH_FLAGS,HIDDEN_COMMAND_ALIASES,HISTORY_AUTHOR_ACKNOWLEDGE_FLAGS,HISTORY_FLAGS,HISTORY_LEAVES,HISTORY_OPERATION_FLAGS,INIT_FLAGS,LIST_FLAGS,MEET_FLAGS,MUTATION_FLAGS,NAMESPACE_NOUNS,NAMESPACE_PREFIXES,NEXT_FLAGS,PACKAGE_LIFECYCLE_ACTIONS,PACKAGE_LIFECYCLE_FLAGS,PLAN_FLAGS,PLAN_SUBCOMMANDS_LIST,RELEASE_MUTATION_FLAGS,REMIND_FLAGS,RESTORE_INVOCATIONS,SCHEMA_SUBCOMMAND_CHOICES,SEARCH_FLAGS,STATS_FLAGS,UPDATE_FLAGS,UPDATE_MANY_FLAGS,UPGRADE_FLAGS,completionNamespaceLeaves,completionStatusValues,completionTypeValues,joinCompletionValues,mergeFlagStrings,normalizeRuntimeCompletionFlags,shellDoubleQuote};
|
|
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]="2c8b847c-770a-556f-a7ea-151c82629318")}catch{}})();import{BUILTIN_ITEM_TYPE_VALUES,STATUS_VALUES}from"../../types/index.js";import{listPmCommandsForTier,resolvePmCommandVisibilityTier}from"../agent-capability-contracts.js";import{AGGREGATE_FLAG_CONTRACTS,APPEND_FLAG_CONTRACTS,CALENDAR_FLAG_CONTRACTS,CLOSE_MANY_FLAG_CONTRACTS,COMPLETION_FLAG_CONTRACTS,CONTEXT_FLAG_CONTRACTS,CONTRACTS_FLAG_CONTRACTS,COPY_FLAG_CONTRACTS,CREATE_FLAG_CONTRACTS,DEPS_FLAG_CONTRACTS,DUPLICATES_FLAG_CONTRACTS,EVENTS_FLAG_CONTRACTS,EXTENSION_FLAG_CONTRACTS,FOCUS_FLAG_CONTRACTS,GET_FLAG_CONTRACTS,GLOBAL_FLAG_CONTRACTS,GRAPH_FLAG_CONTRACTS,GUIDE_FLAG_CONTRACTS,HEALTH_FLAG_CONTRACTS,HISTORY_AUTHOR_ACKNOWLEDGE_FLAG_CONTRACTS,HISTORY_FLAG_CONTRACTS,INIT_FLAG_CONTRACTS,LIST_FILTER_FLAG_CONTRACTS,MEET_FLAG_CONTRACTS,NEXT_FLAG_CONTRACTS,PACKAGE_FLAG_CONTRACTS,PLAN_FLAG_CONTRACTS,PM_COMMAND_ALIAS_CONTRACTS,PM_NAMESPACED_COMMAND_ALIASES,REMIND_FLAG_CONTRACTS,SEARCH_FLAG_CONTRACTS,STATS_FLAG_CONTRACTS,UPDATE_FLAG_CONTRACTS,UPDATE_MANY_FLAG_CONTRACTS,UPGRADE_FLAG_CONTRACTS,resolvePmCommandOperation,resolveSubcommandFlagContractsForCommand,toCompletionFlagString}from"../cli-contracts.js";import{GLOBAL_VALUE_CONSUMING_FLAGS}from"../cli-contracts/bootstrap-command-scanner.js";import{WORKFLOW_POLICY_ACTIONS}from"../cli-contracts/enum-contracts.js";import{PM_COMMAND_DESTINATION_CONTRACTS}from"../cli-contracts/grammar-contracts.js";import{enrichCliFlagInvocationContracts}from"../flag-invocation-contracts.js";import{listGuideTopicIds}from"../guide-topics.js";const DEFAULT_ITEM_TYPES=[...BUILTIN_ITEM_TYPE_VALUES],DEFAULT_STATUS_VALUES=[...STATUS_VALUES],HIDDEN_COMMAND_ALIASES=new Set(PM_COMMAND_ALIAS_CONTRACTS.filter(contract=>contract.hidden).map(contract=>contract.alias)),ALL_COMMANDS=listPmCommandsForTier("full").filter(command=>!command.includes(" ")&&!HIDDEN_COMMAND_ALIASES.has(command)),LIST_FLAGS=toCompletionFlagString(LIST_FILTER_FLAG_CONTRACTS),AGGREGATE_FLAGS=toCompletionFlagString(AGGREGATE_FLAG_CONTRACTS),APPEND_FLAGS=toCompletionFlagString(APPEND_FLAG_CONTRACTS),COPY_FLAGS=toCompletionFlagString(COPY_FLAG_CONTRACTS),RESTORE_INVOCATIONS=enrichCliFlagInvocationContracts("restore",resolveSubcommandFlagContractsForCommand("restore")),ATTEST_INVOCATIONS=enrichCliFlagInvocationContracts("history-attest",resolveSubcommandFlagContractsForCommand("history-attest")),FOCUS_FLAGS=toCompletionFlagString(FOCUS_FLAG_CONTRACTS),MEET_FLAGS=toCompletionFlagString(MEET_FLAG_CONTRACTS),REMIND_FLAGS=toCompletionFlagString(REMIND_FLAG_CONTRACTS),CREATE_FLAGS=toCompletionFlagString(CREATE_FLAG_CONTRACTS),GET_FLAGS=toCompletionFlagString(GET_FLAG_CONTRACTS),UPDATE_FLAGS=toCompletionFlagString(UPDATE_FLAG_CONTRACTS),UPDATE_MANY_FLAGS=toCompletionFlagString(UPDATE_MANY_FLAG_CONTRACTS),CLOSE_MANY_FLAGS=toCompletionFlagString(CLOSE_MANY_FLAG_CONTRACTS),NAMESPACE_NOUNS=[...new Set(PM_NAMESPACED_COMMAND_ALIASES.map(entry=>entry.canonical_argv[0]))],NAMESPACE_PREFIXES=[...new Set(PM_NAMESPACED_COMMAND_ALIASES.flatMap(entry=>entry.canonical_argv.slice(0,-1).map((_,index)=>entry.canonical_argv.slice(0,index+1).join(" "))))],PACKAGE_NAMESPACE_OPERATIONS=new Set(PM_COMMAND_DESTINATION_CONTRACTS.filter(entry=>entry.disposition==="package_owned").map(entry=>resolvePmCommandOperation(entry.command))),HISTORY_COMPLETION_ALIASES=PM_NAMESPACED_COMMAND_ALIASES.filter(entry=>entry.canonical_argv[0]==="history"),HISTORY_LEAVES=HISTORY_COMPLETION_ALIASES.map(entry=>entry.canonical_argv[1]).join(" ");function completionNamespaceLeaves(runtime){const available=new Set((runtime.namespace_commands??[]).map(resolvePmCommandOperation)),aliases=PM_NAMESPACED_COMMAND_ALIASES.filter(entry=>resolvePmCommandVisibilityTier(entry.canonical)!=="internal"&&(!PACKAGE_NAMESPACE_OPERATIONS.has(entry.alias)||available.has(entry.alias)));return Object.fromEntries(NAMESPACE_PREFIXES.map(prefix=>[prefix,[...new Set(aliases.filter(entry=>entry.canonical.startsWith(`${prefix} `)).map(entry=>entry.canonical_argv[prefix.split(" ").length]))].join(" ")]))}const HISTORY_OPERATION_FLAGS=HISTORY_COMPLETION_ALIASES.map(entry=>({...entry,flags:toCompletionFlagString(resolveSubcommandFlagContractsForCommand(entry.alias))})),HISTORY_FLAGS=toCompletionFlagString(HISTORY_FLAG_CONTRACTS),HISTORY_AUTHOR_ACKNOWLEDGE_FLAGS=toCompletionFlagString(HISTORY_AUTHOR_ACKNOWLEDGE_FLAG_CONTRACTS,!1),EVENTS_FLAGS=toCompletionFlagString(EVENTS_FLAG_CONTRACTS),CALENDAR_FLAGS=toCompletionFlagString(CALENDAR_FLAG_CONTRACTS),CONTEXT_FLAGS=toCompletionFlagString(CONTEXT_FLAG_CONTRACTS),NEXT_FLAGS=toCompletionFlagString(NEXT_FLAG_CONTRACTS),DEPS_FLAGS=toCompletionFlagString(DEPS_FLAG_CONTRACTS),DUPLICATES_FLAGS=toCompletionFlagString(DUPLICATES_FLAG_CONTRACTS),GRAPH_FLAGS=toCompletionFlagString(GRAPH_FLAG_CONTRACTS),GUIDE_FLAGS=toCompletionFlagString(GUIDE_FLAG_CONTRACTS),SEARCH_FLAGS=toCompletionFlagString(SEARCH_FLAG_CONTRACTS),STATS_FLAGS=toCompletionFlagString(STATS_FLAG_CONTRACTS),HEALTH_FLAGS=toCompletionFlagString(HEALTH_FLAG_CONTRACTS),INIT_FLAGS=toCompletionFlagString(INIT_FLAG_CONTRACTS),CONTRACTS_FLAGS=toCompletionFlagString(CONTRACTS_FLAG_CONTRACTS),PLAN_FLAGS=toCompletionFlagString(PLAN_FLAG_CONTRACTS),SCHEMA_SUBCOMMAND_CHOICES=`${WORKFLOW_POLICY_ACTIONS.join(" ")} list show show-status add-type remove-type add-status remove-status add-field remove-field list-fields show-field apply-preset rename-type rename-field remap-status`,PLAN_SUBCOMMANDS_LIST="create show add-step update-step complete-step block-step reorder-step remove-step link unlink decision discovery validation resume approve materialize",COMPLETION_FLAGS=toCompletionFlagString(COMPLETION_FLAG_CONTRACTS),COMPLETION_SHELL_CHOICES=`${COMPLETION_FLAGS} bash zsh fish`,GUIDE_TOPIC_CHOICES=joinCompletionValues(listGuideTopicIds()),EXTENSION_LIFECYCLE_ACTIONS="init scaffold install uninstall explore manage describe reload doctor catalog adopt adopt-all activate deactivate migrate",PACKAGE_LIFECYCLE_ACTIONS=`${EXTENSION_LIFECYCLE_ACTIONS} upgrade`,EXTENSION_LIFECYCLE_FLAGS=toCompletionFlagString(EXTENSION_FLAG_CONTRACTS),PACKAGE_LIFECYCLE_FLAGS=toCompletionFlagString(PACKAGE_FLAG_CONTRACTS),UPGRADE_FLAGS=toCompletionFlagString(UPGRADE_FLAG_CONTRACTS),MUTATION_FLAGS="--author --message --force --json --quiet --no-changed-fields --id-only --pm-path --path --no-extensions --no-pager --profile --help",DELETE_MUTATION_FLAGS="--dry-run --author --message --force --json --quiet --no-changed-fields --id-only --pm-path --path --no-extensions --no-pager --profile --help",CLOSE_MUTATION_FLAGS=toCompletionFlagString(resolveSubcommandFlagContractsForCommand("close")),CLOSE_TASK_MUTATION_FLAGS=toCompletionFlagString(resolveSubcommandFlagContractsForCommand("close-task")),RELEASE_MUTATION_FLAGS=toCompletionFlagString(resolveSubcommandFlagContractsForCommand("release")),CLAIM_MUTATION_FLAGS=toCompletionFlagString(resolveSubcommandFlagContractsForCommand("claim")),COMMAND_COMPLETION_DESCRIPTIONS=[["workspace","Workspace initialization, customization, state and snapshots"],["init","Initialize pm storage for the current workspace"],["config","Read or update pm settings"],["package","Manage package lifecycle operations"],["packages","Alias for package"],["create","Create a new project management item"],["item","Manage item evidence, links, tests, and duplication"],["copy","Copy an existing item to a new ID"],["focus","Set/clear/show the session focused parent for new items"],["list","List active items with optional filters"],["aggregate","Aggregate grouped item counts and numeric stats for governance queries"],["duplicates","Find bounded duplicate clusters across lifecycle statuses"],["guide","Browse local progressive-disclosure guides"],["calendar","Show calendar views for deadlines and reminders"],["cal","Alias for calendar"],["context","Show a token-efficient project context snapshot"],["ctx","Alias for context"],["get","Show item details by ID"],["next","Recommend the next actionable (unblocked, ready) work item"],["search","Search items with keyword, semantic, or hybrid modes"],["reindex","Rebuild search artifacts"],["history","Show item history entries"],["history-compact","Compact history streams into a synthetic baseline + retained tail"],["history-redact","Redact sensitive literals/patterns and recompute history hashes"],["history-repair","Re-anchor a drifted history chain so pm health/validate report ok"],["schema","Manage custom item types and statuses in .agents/pm/schema/*.json"],["profile","List, show, apply, and lint project profiles (archetype schema/config/template/package bundles)"],["plan","Agent-optimized Plan item workflow (create/show/add-step/update-step/complete-step/link/approve/materialize)"],["activity","Show recent activity across items"],["restore","Restore an item to an earlier state"],["update","Update item fields and metadata"],["update-many","Bulk-update matched items with dry-run and rollback checkpoints"],["close","Close an item (reason requirement follows governance settings)"],["close-many","Bulk-close matched items with an optional shared reason and rollback checkpoint"],["delete","Delete an item and record the change"],["append","Append text to an item body"],["comments","List or add comments for an item"],["notes","List or add notes for an item"],["learnings","List or add learnings for an item"],["files","Manage linked files"],["docs","Manage linked docs"],["deps","Show dependency relationships for an item"],["graph","Bounded graph traversal, analytics, and governance-audit queries"],["test","Manage linked tests and optionally run them"],["test-all","Run linked tests across matching items"],["test-runs","Manage background linked-test runs"],["stats","Show project tracker statistics"],["health","Show project tracker health checks"],["validate","Run standalone validation checks"],["gc","Clean optional cache artifacts"],["contracts","Show machine-readable command and schema contracts"],["claim","Claim an item for active work"],["release","Release the active claim for an item"],["start-task","Lifecycle alias to claim and set in_progress"],["pause-task","Lifecycle alias to reopen and release claim"],["close-task","Lifecycle alias to close and release claim"],["meet","Shortcut to create a Meeting with scheduling defaults"],["event","Shortcut to create an Event with scheduling defaults"],["remind","Shortcut to create a Reminder from a point in time"],["templates","Manage reusable create templates"],["completion","Generate shell completion"],["help","Display help for a command"]],GLOBAL_FLAGS=GLOBAL_FLAG_CONTRACTS.flatMap(entry=>[entry.short,entry.flag,...entry.aliases??[]]).filter(value=>!!value).join(" "),GLOBAL_COMPLETION_VALUE_PATTERNS=[...GLOBAL_VALUE_CONSUMING_FLAGS].join("|"),GLOBAL_COMPLETION_INLINE_PATTERNS=[...GLOBAL_VALUE_CONSUMING_FLAGS].map(flag=>`${flag}=*`).join("|"),GLOBAL_COMPLETION_SWITCH_PATTERNS=[...GLOBAL_FLAGS.split(" ").filter(flag=>!GLOBAL_VALUE_CONSUMING_FLAGS.has(flag)),"-h","-V"].join("|");function joinCompletionValues(values){return[...new Set(values.map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right)).join(" ")}function joinCompletionValuesInOrder(values){return[...new Set(values.map(value=>value.trim()).filter(value=>value.length>0))].join(" ")}function shellDoubleQuote(value){return value.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll("$","\\$").replaceAll("`","\\`")}function completionTypeValues(itemTypes,runtime){return joinCompletionValuesInOrder(itemTypes.length>0?itemTypes:runtime.item_types??DEFAULT_ITEM_TYPES)}function completionStatusValues(runtime){return joinCompletionValues(runtime.statuses??DEFAULT_STATUS_VALUES)}function mergeFlagStrings(baseFlags,runtimeFlags){const merged=[...baseFlags.split(/\s+/u).filter(value=>value.length>0),...runtimeFlags??[]];return joinCompletionValues(merged)}function normalizeRuntimeCompletionFlags(runtimeFlags){const normalized=(runtimeFlags??[]).map(value=>value.trim()).filter(value=>value.startsWith("--")&&value.length>2).map(value=>`--${value.slice(2).replaceAll("_","-")}`);return[...new Set(normalized)].sort((left,right)=>left.localeCompare(right))}export{AGGREGATE_FLAGS,ALL_COMMANDS,APPEND_FLAGS,ATTEST_INVOCATIONS,CALENDAR_FLAGS,CLAIM_MUTATION_FLAGS,CLOSE_MANY_FLAGS,CLOSE_MUTATION_FLAGS,CLOSE_TASK_MUTATION_FLAGS,COMMAND_COMPLETION_DESCRIPTIONS,COMPLETION_SHELL_CHOICES,CONTEXT_FLAGS,CONTRACTS_FLAGS,COPY_FLAGS,CREATE_FLAGS,DELETE_MUTATION_FLAGS,DEPS_FLAGS,DUPLICATES_FLAGS,EVENTS_FLAGS,EXTENSION_LIFECYCLE_ACTIONS,EXTENSION_LIFECYCLE_FLAGS,FOCUS_FLAGS,GET_FLAGS,GLOBAL_COMPLETION_INLINE_PATTERNS,GLOBAL_COMPLETION_SWITCH_PATTERNS,GLOBAL_COMPLETION_VALUE_PATTERNS,GLOBAL_FLAGS,GRAPH_FLAGS,GUIDE_FLAGS,GUIDE_TOPIC_CHOICES,HEALTH_FLAGS,HIDDEN_COMMAND_ALIASES,HISTORY_AUTHOR_ACKNOWLEDGE_FLAGS,HISTORY_FLAGS,HISTORY_LEAVES,HISTORY_OPERATION_FLAGS,INIT_FLAGS,LIST_FLAGS,MEET_FLAGS,MUTATION_FLAGS,NAMESPACE_NOUNS,NAMESPACE_PREFIXES,NEXT_FLAGS,PACKAGE_LIFECYCLE_ACTIONS,PACKAGE_LIFECYCLE_FLAGS,PLAN_FLAGS,PLAN_SUBCOMMANDS_LIST,RELEASE_MUTATION_FLAGS,REMIND_FLAGS,RESTORE_INVOCATIONS,SCHEMA_SUBCOMMAND_CHOICES,SEARCH_FLAGS,STATS_FLAGS,UPDATE_FLAGS,UPDATE_MANY_FLAGS,UPGRADE_FLAGS,completionNamespaceLeaves,completionStatusValues,completionTypeValues,joinCompletionValues,mergeFlagStrings,normalizeRuntimeCompletionFlags,shellDoubleQuote};
|
|
2
2
|
//# sourceMappingURL=shared.js.map
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
`
|
|
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]="d548143c-24be-5420-8185-f52e3941cff3")}catch{}})();import{PM_NAMESPACED_COMMAND_ALIASES}from"../cli-contracts.js";import{SCAFFOLD_CAPABILITIES}from"../extension/scaffold.js";import{ATTEST_INVOCATIONS,COMMAND_COMPLETION_DESCRIPTIONS,EXTENSION_LIFECYCLE_ACTIONS,GLOBAL_COMPLETION_INLINE_PATTERNS,GLOBAL_COMPLETION_SWITCH_PATTERNS,GLOBAL_COMPLETION_VALUE_PATTERNS,GUIDE_TOPIC_CHOICES,HIDDEN_COMMAND_ALIASES,NAMESPACE_NOUNS,PACKAGE_LIFECYCLE_ACTIONS,RESTORE_INVOCATIONS,SCHEMA_SUBCOMMAND_CHOICES,completionNamespaceLeaves,completionStatusValues,completionTypeValues,joinCompletionValues,normalizeRuntimeCompletionFlags,shellDoubleQuote}from"./shared.js";function escapeZshStaticChoices(value){return value.replace(/([^a-zA-Z0-9_./\s-])/gu,"\\$1").replaceAll("'","'\\''")}function renderZshRuntimeFieldFlagSpecs(runtimeFlags){const normalized=normalizeRuntimeCompletionFlags(runtimeFlags);return normalized.length===0?"":`${normalized.map(flag=>` '${escapeZshStaticChoices(flag)}[Runtime schema field flag]:value' \\`).join(`
|
|
2
|
+
`)}
|
|
3
|
+
`}function renderZshArgumentSpecs(specs,options={}){const trailingContinuation=options.trailingContinuation??!0,lastSpecIndex=specs.length-1;return specs.map((spec,index)=>` ${spec}${trailingContinuation||index!==lastSpecIndex?" \\":""}`).join(`
|
|
4
|
+
`)}function renderZshCommandDescriptions(){return[...COMMAND_COMPLETION_DESCRIPTIONS,["ops","Workspace maintenance and diagnostics"]].filter(([command])=>!HIDDEN_COMMAND_ALIASES.has(command)).map(([command,description])=>` '${command}:${description}'`).join(`
|
|
5
|
+
`)}function renderZshPresenceFilterSpecs(options){const missingSpecs=["reviewer-missing[Select only items missing reviewer]","risk-missing[Select only items missing risk]","confidence-missing[Select only items missing confidence]","sprint-missing[Select only items missing sprint]","release-missing[Select only items missing release]"],contentMissingAliasSpecs=options.includeContentMissingAliases===!0?["files-missing[Alias for --no-files]","docs-missing[Alias for --no-docs]"]:[],pairedSpecs=[["has-notes[Select only items that have notes]","no-notes[Select only items with no notes]"],["has-learnings[Select only items that have learnings]","no-learnings[Select only items with no learnings]"],["has-files[Select only items that have linked files]","no-files[Select only items with no linked files]"],["has-docs[Select only items that have linked docs]","no-docs[Select only items with no linked docs]"],["has-tests[Select only items that have linked tests]","no-tests[Select only items with no linked tests]"],["has-comments[Select only items that have comments]","no-comments[Select only items with no comments]"],["has-deps[Select only items that have dependencies]","no-deps[Select only items with no dependencies]"],["has-body[Select only items with non-empty body]","empty-body[Select only items with empty body]"],["has-linked-command[Select only items that have a linked command]","no-linked-command[Select only items with no linked command]"]];return renderZshArgumentSpecs([...[...missingSpecs,...contentMissingAliasSpecs].map(spec=>`'--${options.missingPrefix}${spec}'`),...pairedSpecs.flatMap(([positive,negative])=>[`'--${options.pairedPrefix}${positive}'`,`'--${options.pairedPrefix}${negative}'`])])}const ZSH_MUTATION_COLLECTION_ARGUMENT_SPECS=["'--comment[Comment seed author=<value>,created_at=<iso|now>,text=<value>]:comment'","'--note[Note seed author=<value>,created_at=<iso|now>,text=<value>]:note'","'--learning[Learning seed author=<value>,created_at=<iso|now>,text=<value>]:learning'","'--file[Linked file path=<value>,scope=<project|global>,note=<text>]:file'","'--test[Linked test command=<value>,path=<value>,scope=<project|global>]:test'","'--doc[Linked doc path=<value>,scope=<project|global>,note=<text>]:doc'","'--reminder[Reminder entry at=<iso|relative>|date=<iso|relative>,text=<text>|title=<text>]:reminder'","'--event[Event entry start=<iso|relative>,end=<iso|relative>,recur_*]:event'","'--type-option[Type option key=value or key=<name>,value=<value>]:type_option'","'--unset[Clear scalar metadata field by name]:field'","'--replace-files[Atomically replace linked files with provided --file values]'","'--replace-docs[Atomically replace linked docs with provided --doc values]'","'--clear-deps[Clear dependency entries]'","'--clear-comments[Clear comments]'","'--clear-notes[Clear notes]'","'--clear-learnings[Clear learnings]'","'--clear-files[Clear linked files]'","'--clear-tests[Clear linked tests]'","'--clear-docs[Clear linked docs]'","'--clear-reminders[Clear reminders]'","'--clear-events[Clear events]'","'--clear-type-options[Clear type options]'"];function renderZshScheduleItemSpecs(kind){return renderZshArgumentSpecs([...kind==="reminder"?["'--at[Reminder time (default +1d)]:at'","'--text[Reminder text (defaults to title)]:text'"]:["'--start[Start time (ISO, now, or relative)]:start'","'--duration[Duration from start (default 1h)]:duration'","'--end[End time (overrides --duration)]:end'","'--location[Location]:location'","'--timezone[IANA timezone]:timezone'","'--all-day[Mark as an all-day event]'"],"'--parent[Parent item id]:parent'","'--allow-missing-parent[Permit a parent id that does not exist yet]'","'--tags[Comma-separated tags]:tags'","'(-p --priority)'{-p,--priority}'[Priority (0-4)]:(0 1 2 3 4)'","'(-b --body)'{-b,--body}'[Item body]:body'","'(-d --description)'{-d,--description}'[Short description]:description'","'--author[Mutation author]:author'","'--message[History message]:message'","'--json[Output JSON]'","'--quiet[Suppress stdout]'"],{trailingContinuation:!1})}function renderZshBulkSelectionFilterSpecs(action,statusChoices,typeChoices,tagChoices){return renderZshArgumentSpecs([`'--filter-status[Filter by status before ${action}]:(${statusChoices})'`,`'--filter-type[Filter by type before ${action}]:(${typeChoices})'`,`'--filter-tag[Filter by tag before ${action}]:(${tagChoices})'`,`'--filter-priority[Filter by priority before ${action}]:(0 1 2 3 4)'`,"'--filter-deadline-before[Filter by deadline upper bound]:deadline'","'--filter-deadline-after[Filter by deadline lower bound]:deadline'","'--filter-updated-after[Filter by updated_at lower bound (ISO/relative)]:timestamp'","'--filter-updated-before[Filter by updated_at upper bound (ISO/relative)]:timestamp'","'--filter-created-after[Filter by created_at lower bound (ISO/relative)]:timestamp'","'--filter-created-before[Filter by created_at upper bound (ISO/relative)]:timestamp'",`'--filter-assignee[Filter by assignee before ${action}]:assignee'`,"'--filter-assignee-filter[Filter assignee presence]:(assigned unassigned)'","'--filter-parent[Filter by parent item ID]:parent'","'--filter-sprint[Filter by sprint]:sprint'","'--filter-release[Filter by release]:release'"])}function renderZshDynamicChoiceResolver(kind,command,fallback){const envKind=kind.toUpperCase(),cacheVar=`PM_COMPLETION_${envKind}_CACHE`,cacheTsVar=`PM_COMPLETION_${envKind}_CACHE_TS`,ttlVar=`PM_COMPLETION_${envKind}_TTL`,escapedFallback=shellDoubleQuote(fallback);return`
|
|
3
6
|
_pm_${kind}_choices() {
|
|
4
7
|
local now ttl cache_ts resolved
|
|
5
8
|
now=\${EPOCHSECONDS:-0}
|
|
@@ -17,7 +20,7 @@ _pm_${kind}_choices() {
|
|
|
17
20
|
${cacheTsVar}="$now"
|
|
18
21
|
print -r -- "$${cacheVar}"
|
|
19
22
|
}
|
|
20
|
-
`}function generateZshScript(itemTypes=[],tags=[],eagerTagExpansion
|
|
23
|
+
`}function generateZshScript(itemTypes=[],tags=[],eagerTagExpansion=!1,runtime={}){const namespaceLeaves=completionNamespaceLeaves(runtime),useDynamicTypeExpansion=itemTypes.length===0,typeFallbackChoices=completionTypeValues(itemTypes,runtime),statusFallbackChoices=completionStatusValues(runtime),typeChoices=useDynamicTypeExpansion?'${(f)"$(_pm_type_choices)"}':escapeZshStaticChoices(typeFallbackChoices),statusChoices='${(f)"$(_pm_status_choices)"}',guideTopicChoices=GUIDE_TOPIC_CHOICES,tagChoices=joinCompletionValues(tags),useEagerTagExpansion=eagerTagExpansion||tags.length>0,zshTagChoices=useEagerTagExpansion?escapeZshStaticChoices(tagChoices):'${(f)"$(_pm_tag_choices)"}',zshListRuntimeFieldFlags=renderZshRuntimeFieldFlagSpecs(runtime.command_flags?.list),zshCreateRuntimeFieldFlags=renderZshRuntimeFieldFlagSpecs(runtime.command_flags?.create),zshSearchRuntimeFieldFlags=renderZshRuntimeFieldFlagSpecs(runtime.command_flags?.search),zshCalendarRuntimeFieldFlags=renderZshRuntimeFieldFlagSpecs(runtime.command_flags?.calendar),zshContextRuntimeFieldFlags=renderZshRuntimeFieldFlagSpecs(runtime.command_flags?.context),zshPresenceFilterFlags=renderZshPresenceFilterSpecs({missingPrefix:"filter-",pairedPrefix:"",includeContentMissingAliases:!0}),zshBulkPresenceFilterFlags=renderZshPresenceFilterSpecs({missingPrefix:"filter-",pairedPrefix:"filter-"}),zshMutationCollectionFlags=renderZshArgumentSpecs(ZSH_MUTATION_COLLECTION_ARGUMENT_SPECS),dynamicTagResolver=useEagerTagExpansion?"":`
|
|
21
24
|
_pm_tag_choices() {
|
|
22
25
|
local now ttl cache_ts
|
|
23
26
|
now=\${EPOCHSECONDS:-0}
|
|
@@ -64,7 +67,8 @@ _pm() {
|
|
|
64
67
|
namespace_noun="$word"
|
|
65
68
|
else
|
|
66
69
|
case "$namespace_noun $word" in
|
|
67
|
-
${PM_NAMESPACED_COMMAND_ALIASES.map(entry=>` "${entry.canonical}") namespace_noun="${entry.canonical}"; operation_path="$namespace_noun"; operation_index=$word_index ;;`).join(
|
|
70
|
+
${PM_NAMESPACED_COMMAND_ALIASES.map(entry=>` "${entry.canonical}") namespace_noun="${entry.canonical}"; operation_path="$namespace_noun"; operation_index=$word_index ;;`).join(`
|
|
71
|
+
`)}
|
|
68
72
|
*) break ;;
|
|
69
73
|
esac
|
|
70
74
|
fi
|
|
@@ -73,7 +77,8 @@ ${PM_NAMESPACED_COMMAND_ALIASES.map(entry=>` "${entry.canonical}") namesp
|
|
|
73
77
|
if [[ -n "$namespace_noun" ]] && (( word_index == CURRENT )) && [[ "$words[CURRENT]" != -* ]]; then
|
|
74
78
|
local -a history_commands
|
|
75
79
|
case "$namespace_noun" in
|
|
76
|
-
${Object.entries(namespaceLeaves).map(([noun,leaves])=>` "${noun}") history_commands=(${leaves}) ;;`).join(
|
|
80
|
+
${Object.entries(namespaceLeaves).map(([noun,leaves])=>` "${noun}") history_commands=(${leaves}) ;;`).join(`
|
|
81
|
+
`)}
|
|
77
82
|
esac
|
|
78
83
|
if (( \${#history_commands} > 0 )); then
|
|
79
84
|
_describe 'command operation' history_commands
|
|
@@ -82,7 +87,8 @@ ${Object.entries(namespaceLeaves).map(([noun,leaves])=>` "${noun}") history
|
|
|
82
87
|
fi
|
|
83
88
|
if (( operation_index > 0 )); then
|
|
84
89
|
case "$operation_path" in
|
|
85
|
-
${PM_NAMESPACED_COMMAND_ALIASES.map(entry=>` "${entry.canonical}") words=("$words[1]" "${entry.alias}" "\${words[@]:$operation_index}"); (( CURRENT -= operation_index - 2 )) ;;`).join(
|
|
90
|
+
${PM_NAMESPACED_COMMAND_ALIASES.map(entry=>` "${entry.canonical}") words=("$words[1]" "${entry.alias}" "\${words[@]:$operation_index}"); (( CURRENT -= operation_index - 2 )) ;;`).join(`
|
|
91
|
+
`)}
|
|
86
92
|
esac
|
|
87
93
|
fi
|
|
88
94
|
_arguments -C \\
|
|
@@ -488,7 +494,7 @@ ${zshSearchRuntimeFieldFlags} '--json[Output JSON]' \\
|
|
|
488
494
|
;;
|
|
489
495
|
history-attest)
|
|
490
496
|
_arguments \\
|
|
491
|
-
${renderZshArgumentSpecs(ATTEST_INVOCATIONS.map(flag=>`'${flag.flag}[${flag.description}]${flag.takes_value?":value":""}'`),{trailingContinuation
|
|
497
|
+
${renderZshArgumentSpecs(ATTEST_INVOCATIONS.map(flag=>`'${flag.flag}[${flag.description}]${flag.takes_value?":value":""}'`),{trailingContinuation:!1})}
|
|
492
498
|
;;
|
|
493
499
|
history-compact)
|
|
494
500
|
_arguments \\
|
|
@@ -943,7 +949,7 @@ ${renderZshArgumentSpecs(ATTEST_INVOCATIONS.map(flag=>`'${flag.flag}[${flag.desc
|
|
|
943
949
|
;;
|
|
944
950
|
restore)
|
|
945
951
|
_arguments \\
|
|
946
|
-
${renderZshArgumentSpecs(RESTORE_INVOCATIONS.map(flag=>`'${flag.flag}[${flag.description}]${flag.takes_value?":value":""}'`),{trailingContinuation
|
|
952
|
+
${renderZshArgumentSpecs(RESTORE_INVOCATIONS.map(flag=>`'${flag.flag}[${flag.description}]${flag.takes_value?":value":""}'`),{trailingContinuation:!1})}
|
|
947
953
|
;;
|
|
948
954
|
start-task|pause-task)
|
|
949
955
|
_arguments \\
|
package/dist/sdk/completion.js
CHANGED
|
@@ -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]="a7cfbd72-3010-53e7-946b-e65842ee4ceb")}catch{}})();import{generateBashScript}from"./completion/bash.js";import{generateFishScript}from"./completion/fish.js";import{generateZshScript}from"./completion/zsh.js";import{EXIT_CODE,PmCliError}from"./runtime-primitives.js";const VALID_SHELLS=["bash","zsh","fish"],SETUP_HINTS={bash:'Add to ~/.bashrc or ~/.bash_profile: eval "$(pm completion bash)"',zsh:'Add to ~/.zshrc: eval "$(pm completion zsh)"',fish:"Run: pm completion fish > ~/.config/fish/completions/pm.fish"};function runCompletion(shell,itemTypes=[],tags=[],eagerTagExpansion=!1,runtime={}){const normalized=shell.trim().toLowerCase();if(!VALID_SHELLS.includes(normalized))throw new PmCliError(`Unknown shell: "${shell}". Supported shells: ${VALID_SHELLS.join(", ")}.`,EXIT_CODE.USAGE);const validShell=normalized;let script;return validShell==="bash"?script=generateBashScript(itemTypes,tags,eagerTagExpansion,runtime):validShell==="zsh"?script=generateZshScript(itemTypes,tags,eagerTagExpansion,runtime):script=generateFishScript(itemTypes,tags,eagerTagExpansion,runtime),{shell:validShell,script,setup_hint:SETUP_HINTS[validShell]}}import{generateBashScript as generateBashScript2}from"./completion/bash.js";import{generateFishScript as generateFishScript2}from"./completion/fish.js";import{generateZshScript as generateZshScript2}from"./completion/zsh.js";export{generateBashScript2 as generateBashScript,generateFishScript2 as generateFishScript,generateZshScript2 as generateZshScript,runCompletion};
|
|
2
2
|
//# sourceMappingURL=completion.js.map
|
package/dist/sdk/compose.js
CHANGED
|
@@ -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]="c06f3fb3-4b1f-5fdb-a9ce-bce8f88704aa")}catch(e2){}})();import{normalizeKnownExtensionCapability,resolveLegacyExtensionCapabilityAlias}from"../core/extensions/extension-capability-aliases.js";import{normalizeCommandName}from"../core/extensions/extension-runtime-helpers.js";import{RESERVED_ITEM_FIELD_NAMES}from"../core/extensions/item-fields.js";import{describeExtensionLongFlagFailure,findExtensionFlagTokenFailure}from"../core/extensions/flag-definition-validation.js";import{evaluatePmMaxVersionBound,evaluatePmMinVersionBound}from"../core/extensions/version-compat.js";import{inspectExtensionManifestSchema,lintExtensionManifestSchema}from"../core/extensions/manifest-schema.js";function defineExtension(module){return module}function defineExtensionBlueprint(blueprint){return blueprint}function registerBlueprintCommandSurfaces(api,blueprint){for(const command of blueprint.commands??[]){api.registerCommand(command)}for(const[command,override]of Object.entries(blueprint.commandOverrides??{})){api.registerCommand(command,override)}for(const[targetCommand,flags]of Object.entries(blueprint.flags??{})){api.registerFlags(targetCommand,flags)}for(const[command,override]of Object.entries(blueprint.parsers??{})){api.registerParser(command,override)}for(const[format,renderer]of Object.entries(blueprint.renderers??{})){if(typeof renderer==="function"){api.registerRenderer(format,renderer)}else{const{run,...ownership}=renderer;api.registerRenderer(format,run,ownership)}}for(const[service,override]of Object.entries(blueprint.services??{})){api.registerService(service,override)}}function registerBlueprintSchemaSurfaces(api,blueprint){for(const override of blueprint.preflights??[]){api.registerPreflight(override)}const itemTypes=blueprint.itemTypes??[];if(itemTypes.length>0){api.registerItemTypes(itemTypes)}const itemFields=blueprint.itemFields??[];if(itemFields.length>0){api.registerItemFields(itemFields)}const relationshipKinds=blueprint.relationshipKinds??[];if(relationshipKinds.length>0){api.registerRelationshipKinds(relationshipKinds)}for(const migration of blueprint.migrations??[]){api.registerMigration(migration)}for(const profile of blueprint.profiles??[]){api.registerProfile(profile)}}function registerBlueprintRetrievalSurfaces(api,blueprint){for(const provider of blueprint.searchProviders??[]){api.registerSearchProvider(provider)}for(const adapter of blueprint.vectorStoreAdapters??[]){api.registerVectorStoreAdapter(adapter)}for(const provider of blueprint.assuranceProviders??[]){api.registerAssuranceMeasurementProvider(provider)}for(const entry of blueprint.importers??[]){api.registerImporter(entry.name,entry.importer,entry.options)}for(const entry of blueprint.exporters??[]){api.registerExporter(entry.name,entry.exporter,entry.options)}}function registerBlueprintHooks(api,hooks){for(const hook of hooks.beforeCommand??[]){api.hooks.beforeCommand(hook)}for(const hook of hooks.beforeMutation??[]){api.hooks.beforeMutation(hook)}for(const hook of hooks.afterCommand??[]){api.hooks.afterCommand(hook)}for(const hook of hooks.onWrite??[]){api.hooks.onWrite(hook)}for(const hook of hooks.onRead??[]){api.hooks.onRead(hook)}for(const hook of hooks.onIndex??[]){api.hooks.onIndex(hook)}}function composeExtension(blueprint){const activate=async api=>{registerBlueprintCommandSurfaces(api,blueprint);registerBlueprintSchemaSurfaces(api,blueprint);registerBlueprintRetrievalSurfaces(api,blueprint);registerBlueprintHooks(api,blueprint.hooks??{});await blueprint.activate?.(api)};const module={activate};if(blueprint.manifest){module.manifest=blueprint.manifest}if(blueprint.deactivate){module.deactivate=blueprint.deactivate}return module}function mergeArraySurface(surfaces){const merged=surfaces.flatMap(surface=>surface??[]);return merged.length>0?merged:void 0}function mergeHandlerRecord(surfaces){const merged=Object.assign({},...surfaces.map(surface=>surface??{}));return Object.keys(merged).length>0?merged:void 0}function mergeFlagRecord(surfaces){const merged={};for(const surface of surfaces){for(const[command,flags]of Object.entries(surface??{})){merged[command]=[...merged[command]??[],...flags]}}return Object.keys(merged).length>0?merged:void 0}const EXTENSION_BLUEPRINT_HOOK_KEYS=["beforeCommand","beforeMutation","afterCommand","onWrite","onRead","onIndex"];const EXTENSION_BLUEPRINT_HOOK_KEY_COVERAGE={};void EXTENSION_BLUEPRINT_HOOK_KEY_COVERAGE;function assignMergedHookSurface(merged,surfaces,key){const hookArrays=surfaces.map(hooks=>hooks?.[key]);const value=mergeArraySurface(hookArrays);if(value!==void 0){const typedMerged=merged;typedMerged[key]=value}}function mergeHookSurfaces(surfaces){const merged={};for(const key of EXTENSION_BLUEPRINT_HOOK_KEYS){assignMergedHookSurface(merged,surfaces,key)}return Object.keys(merged).length>0?merged:void 0}function mergeExtensionBlueprints(...blueprints){const merged={};const assign=(key,value)=>{if(value!==void 0){merged[key]=value}};assign("commands",mergeArraySurface(blueprints.map(blueprint=>blueprint.commands)));assign("commandOverrides",mergeHandlerRecord(blueprints.map(blueprint=>blueprint.commandOverrides)));assign("flags",mergeFlagRecord(blueprints.map(blueprint=>blueprint.flags)));assign("parsers",mergeHandlerRecord(blueprints.map(blueprint=>blueprint.parsers)));assign("renderers",mergeHandlerRecord(blueprints.map(blueprint=>blueprint.renderers)));assign("services",mergeHandlerRecord(blueprints.map(blueprint=>blueprint.services)));assign("preflights",mergeArraySurface(blueprints.map(blueprint=>blueprint.preflights)));assign("itemTypes",mergeArraySurface(blueprints.map(blueprint=>blueprint.itemTypes)));assign("itemFields",mergeArraySurface(blueprints.map(blueprint=>blueprint.itemFields)));assign("relationshipKinds",mergeArraySurface(blueprints.map(blueprint=>blueprint.relationshipKinds)));assign("migrations",mergeArraySurface(blueprints.map(blueprint=>blueprint.migrations)));assign("profiles",mergeArraySurface(blueprints.map(blueprint=>blueprint.profiles)));assign("searchProviders",mergeArraySurface(blueprints.map(blueprint=>blueprint.searchProviders)));assign("vectorStoreAdapters",mergeArraySurface(blueprints.map(blueprint=>blueprint.vectorStoreAdapters)));assign("assuranceProviders",mergeArraySurface(blueprints.map(blueprint=>blueprint.assuranceProviders)));assign("importers",mergeArraySurface(blueprints.map(blueprint=>blueprint.importers)));assign("exporters",mergeArraySurface(blueprints.map(blueprint=>blueprint.exporters)));assign("hooks",mergeHookSurfaces(blueprints.map(blueprint=>blueprint.hooks)));let manifest;for(const blueprint of blueprints){if(blueprint.manifest){manifest=blueprint.manifest}}assign("manifest",manifest);const hasActivates=blueprints.some(blueprint=>blueprint.activate);assign("activate",hasActivates?async api=>{for(const blueprint of blueprints){if(blueprint.activate){await blueprint.activate(api)}}}:void 0);const hasDeactivates=blueprints.some(blueprint=>blueprint.deactivate);assign("deactivate",hasDeactivates?async()=>{const errors=[];for(const blueprint of[...blueprints].reverse()){if(!blueprint.deactivate){continue}try{await blueprint.deactivate()}catch(error){errors.push(error)}}if(errors.length>0){if(errors.length>1){throw new AggregateError(errors,"Multiple extension blueprint deactivate hooks failed.")}throw errors[0]}}:void 0);return merged}const BLUEPRINT_FIELD_CAPABILITIES=[["commands","commands"],["commandOverrides","commands"],["flags","schema"],["itemTypes","schema"],["itemFields","schema"],["relationshipKinds","schema"],["migrations","schema"],["profiles","schema"],["parsers","parser"],["renderers","renderers"],["services","services"],["preflights","preflight"],["searchProviders","search"],["vectorStoreAdapters","search"],["assuranceProviders","services"],["importers","importers"],["exporters","importers"]];function hasEntries(value){if(!value){return false}if(Array.isArray(value)){return value.length>0}return Object.keys(value).length>0}function deriveExtensionCapabilities(blueprint){const capabilities=new Set;for(const[field,capability]of BLUEPRINT_FIELD_CAPABILITIES){if(hasEntries(blueprint[field])){capabilities.add(capability)}}if((blueprint.commands??[]).filter(isPresent).some(command=>command.flags!==void 0)){capabilities.add("schema")}const importExportEntries=[...blueprint.importers??[],...blueprint.exporters??[]].filter(isPresent);if(importExportEntries.some(entry=>entry?.options?.flags!==void 0)){capabilities.add("schema")}if(importExportEntries.some(entry=>typeof entry==="object")){capabilities.add("commands")}const hooks=blueprint.hooks??{};if([hooks.beforeCommand,hooks.beforeMutation,hooks.afterCommand,hooks.onWrite,hooks.onRead,hooks.onIndex].some(hasEntries)){capabilities.add("hooks")}return[...capabilities].sort((left,right)=>left.localeCompare(right))}const BLUEPRINT_HOOK_FIELD_TO_KIND=[["beforeCommand","before_command"],["beforeMutation","before_mutation"],["afterCommand","after_command"],["onWrite","on_write"],["onRead","on_read"],["onIndex","on_index"]];function sortUnique(values){return[...new Set(values)].sort((left,right)=>left.localeCompare(right))}function isPresent(value){return value!==null&&value!==void 0}function importerCommandPath(entry){return normalizeCommandName(`${entry.name} import`)}function exporterCommandPath(entry){return normalizeCommandName(`${entry.name} export`)}function collectBlueprintCommandPaths(commands,importers,exporters){return[...commands.map(command=>normalizeCommandName(command.name)),...importers.filter(entry=>entry.options!==void 0).map(importerCommandPath),...exporters.filter(entry=>entry.options!==void 0).map(exporterCommandPath)]}function collectBlueprintFlagCommands(blueprint,commands,importers,exporters){return[...Object.keys(blueprint.flags??{}).map(command=>normalizeCommandName(command)),...commands.filter(command=>command.flags!==void 0).map(command=>normalizeCommandName(command.name)),...importers.filter(entry=>entry.options?.flags!==void 0).map(importerCommandPath),...exporters.filter(entry=>entry.options?.flags!==void 0).map(exporterCommandPath)]}function collectBlueprintHookKinds(hooks){return BLUEPRINT_HOOK_FIELD_TO_KIND.filter(([field])=>(hooks[field]?.length??0)>0).map(([,kind])=>kind)}function collectBlueprintRendererOwnership(renderers){const ownership=Object.entries(renderers??{}).filter(([,renderer])=>typeof renderer!=="function"&&((renderer.commands?.length??0)>0||renderer.resultDiscriminator!==void 0)).map(([format,renderer])=>{const scoped=renderer;return{format,commands:sortUnique((scoped.commands??[]).map(command=>normalizeCommandName(command))),result_discriminator:scoped.resultDiscriminator!==void 0}}).sort((left,right)=>left.format.localeCompare(right.format));return ownership.length>0?{renderer_ownership:ownership}:{}}function collectBlueprintAssuranceProviders(providers){if(!providers||providers.length===0)return{};return{assurance_providers:sortUnique(providers.map(provider=>provider.id))}}function collectBlueprintSurfaceSummary(blueprint,importers,exporters){return{item_types:sortUnique((blueprint.itemTypes??[]).map(type=>type.name)),item_fields:sortUnique((blueprint.itemFields??[]).map(field=>field.name)),...(blueprint.relationshipKinds?.length??0)>0?{relationship_kinds:sortUnique(blueprint.relationshipKinds.map(definition=>definition.kind))}:{},migrations:sortUnique((blueprint.migrations??[]).flatMap(migration=>typeof migration.id==="string"?[migration.id]:[])),profiles:sortUnique((blueprint.profiles??[]).map(profile=>profile.name)),importers:sortUnique(importers.map(entry=>normalizeCommandName(entry.name))),exporters:sortUnique(exporters.map(entry=>normalizeCommandName(entry.name))),search_providers:sortUnique((blueprint.searchProviders??[]).map(provider=>provider.name)),vector_store_adapters:sortUnique((blueprint.vectorStoreAdapters??[]).map(adapter=>adapter.name)),...collectBlueprintAssuranceProviders(blueprint.assuranceProviders),parser_overrides:sortUnique(Object.keys(blueprint.parsers??{}).map(command=>normalizeCommandName(command))),service_overrides:sortUnique(Object.keys(blueprint.services??{}).map(service=>String(service).trim().toLowerCase())),renderer_overrides:sortUnique(Object.keys(blueprint.renderers??{}).map(format=>String(format).trim().toLowerCase())),...collectBlueprintRendererOwnership(blueprint.renderers),preflight_overrides:(blueprint.preflights??[]).length,preflight_ownership:(blueprint.preflights??[]).map(preflight=>({commands:[...preflight.commands??[]]}))}}function describeExtensionBlueprint(blueprint){const commands=(blueprint.commands??[]).filter(isPresent);const importers=(blueprint.importers??[]).filter(isPresent);const exporters=(blueprint.exporters??[]).filter(isPresent);const importerPaths=importers.map(importerCommandPath);const exporterPaths=exporters.map(exporterCommandPath);const commandPaths=collectBlueprintCommandPaths(commands,importers,exporters);const flagCommands=collectBlueprintFlagCommands(blueprint,commands,importers,exporters);const hooks=blueprint.hooks??{};const surfaces=collectBlueprintSurfaceSummary(blueprint,importers,exporters);return{capabilities:deriveExtensionCapabilities(blueprint),commands:sortUnique(commandPaths),command_overrides:sortUnique(Object.keys(blueprint.commandOverrides??{}).map(command=>normalizeCommandName(command))),command_handlers:sortUnique([...commandPaths,...importerPaths,...exporterPaths]),hooks:collectBlueprintHookKinds(hooks),flag_commands:sortUnique(flagCommands),...surfaces}}const BLUEPRINT_LINTABLE_SURFACE_FIELDS=["commands","commandOverrides","flags","parsers","renderers","services","preflights","itemTypes","itemFields","relationshipKinds","migrations","profiles","searchProviders","vectorStoreAdapters","assuranceProviders","importers","exporters"];function collectReservedItemFieldFindings(blueprint){return(blueprint.itemFields??[]).filter(field=>typeof field?.name==="string"&&RESERVED_ITEM_FIELD_NAMES.has(field.name.trim())).map(field=>({code:"reserved_item_field",severity:"error",message:`Item field "${field.name}" collides with reserved item metadata; rename it with an extension-specific prefix before publishing.`,field:field.name}))}function collectBlueprintFlagFindings(blueprint){const definitions=[...Object.values(blueprint.flags??{}).flat(),...(blueprint.commands??[]).flatMap(command=>command.flags??[]),...(blueprint.importers??[]).flatMap(entry=>entry.options?.flags??[]),...(blueprint.exporters??[]).flatMap(entry=>entry.options?.flags??[])];return definitions.flatMap(definition=>{if(typeof definition?.long!=="string"&&typeof definition?.short!=="string"){return[]}const finding=findExtensionFlagTokenFailure(definition.long,definition.short);if(finding===null){return[]}const{token,failure}=finding;return[{code:failure,severity:"error",message:`Flag "${token}" ${describeExtensionLongFlagFailure(token,failure)}.`,field:token}]})}function normalizeDeclaredCapabilities(capabilities){const known=new Set;for(const capability of capabilities){const normalized=resolveLegacyExtensionCapabilityAlias(capability)??normalizeKnownExtensionCapability(capability);if(normalized!==null){known.add(normalized)}}return[...known].sort((left,right)=>left.localeCompare(right))}function collectBlueprintCapabilityFindings(used,declared){const findings=[];if(declared===null){if(used.length>0){findings.push({code:"manifest_capabilities_absent",severity:"warning",message:`Blueprint exercises ${used.length===1?"capability":"capabilities"} [${used.join(", ")}] but declares none; set capabilities to deriveExtensionCapabilities(blueprint) so the manifest grant matches.`})}return findings}const declaredSet=new Set(declared);const usedSet=new Set(used);for(const capability of used){if(!declaredSet.has(capability)){findings.push({code:"capability_undeclared",severity:"error",message:`Blueprint exercises capability "${capability}" but it is absent from the declared capabilities; activation throws extension_capability_missing \u2014 add "${capability}" to the manifest capabilities.`,capability})}}for(const capability of declared){if(!usedSet.has(capability)){findings.push({code:"capability_unused",severity:"warning",message:`Capability "${capability}" is declared but no blueprint surface exercises it; drop it to keep the manifest least-privilege (pm package doctor reports this as extension_capability_unused).`,capability})}}return findings}function collectBlueprintCommandFindings(blueprint){const findings=[];const commandPathCounts=new Map;for(const command of blueprint.commands??[]){const path=normalizeCommandName(command.name);commandPathCounts.set(path,(commandPathCounts.get(path)??0)+1)}for(const[path,count]of commandPathCounts){if(count>1){findings.push({code:"duplicate_command",severity:"warning",message:`Command "${path}" is declared ${count} times in commands; the later registration shadows the earlier one at dispatch.`,command:path})}}const overridePaths=new Set(Object.keys(blueprint.commandOverrides??{}).map(command=>normalizeCommandName(command)));for(const path of commandPathCounts.keys()){if(overridePaths.has(path)){findings.push({code:"command_override_conflict",severity:"warning",message:`Command "${path}" is declared both as a new command definition and as a command override; register one or the other.`,command:path})}}return findings}function collectBlueprintEmptySurfaceFindings(blueprint){const findings=[];for(const field of BLUEPRINT_LINTABLE_SURFACE_FIELDS){if(field in blueprint&&!hasEntries(blueprint[field])){findings.push({code:"empty_surface",severity:"warning",message:`Blueprint field "${field}" is present but empty; remove it or populate it.`,field})}}if("hooks"in blueprint){const hooks=blueprint.hooks??{};const registersHook=[hooks.beforeCommand,hooks.beforeMutation,hooks.afterCommand,hooks.onWrite,hooks.onRead,hooks.onIndex].some(hasEntries);if(!registersHook){findings.push({code:"empty_surface",severity:"warning",message:`Blueprint field "hooks" is present but registers no lifecycle hooks; remove it or populate it.`,field:"hooks"})}}return findings}function lintExtensionBlueprint(blueprint,options={}){const used=deriveExtensionCapabilities(blueprint);const declaredSource=options.declaredCapabilities??blueprint.manifest?.capabilities;const declared=Array.isArray(declaredSource)?normalizeDeclaredCapabilities(declaredSource):null;const findings=[...collectBlueprintCapabilityFindings(used,declared),...collectBlueprintCommandFindings(blueprint),...collectBlueprintFlagFindings(blueprint),...collectReservedItemFieldFindings(blueprint),...collectBlueprintEmptySurfaceFindings(blueprint)];return{ok:findings.every(finding=>finding.severity!=="error"),findings,used,declared}}function synthesizeExtensionManifest(blueprint,identity){const{additionalCapabilities,...manifestIdentity}=identity;const extra=Array.isArray(additionalCapabilities)?normalizeDeclaredCapabilities(additionalCapabilities):[];const capabilities=[...new Set([...deriveExtensionCapabilities(blueprint),...extra])].sort((left,right)=>left.localeCompare(right));return{...manifestIdentity,capabilities}}function composeExtensionPackage(blueprint,identity){const manifest=synthesizeExtensionManifest(blueprint,identity);const module=composeExtension({...blueprint,manifest});return{module,manifest}}function toCompatibilityFinding(evaluation,pmVersion){if(evaluation.status==="absent"||evaluation.status==="ok"){return null}const code=`${evaluation.kind}_${evaluation.status}`;let message="";switch(code){case"pm_min_version_invalid":message=`pm_min_version "${evaluation.required}" is not a valid version; the extension is treated as incompatible and the loader skips it.`;break;case"pm_min_version_unchecked":message=`pm_min_version "${evaluation.required}" could not be compared against pm ${pmVersion}; compatibility is unverified.`;break;case"pm_min_version_unmet":message=`Requires pm >= ${evaluation.required} but the target is pm ${pmVersion}; the loader skips the extension.`;break;case"pm_max_version_invalid":message=`pm_max_version "${evaluation.required}" is not a valid inclusive upper bound (version ranges are not allowed); the extension is treated as incompatible and the loader skips it.`;break;case"pm_max_version_unchecked":message=`pm_max_version "${evaluation.required}" could not be compared against pm ${pmVersion}; compatibility is unverified.`;break;case"pm_max_version_exceeded":message=`Allows pm <= ${evaluation.required} but the target is pm ${pmVersion}; the loader skips the extension.`;break;case"pm_max_version_exceeded_warn":message=`Target pm ${pmVersion} is newer than pm_max_version ${evaluation.required}, but the "warn" exceeded mode lets it load with a warning.`;break}return{code,severity:evaluation.allowed?"warning":"error",constraint:evaluation.kind,required:evaluation.required,current:pmVersion,message}}function checkExtensionManifestCompatibility(manifest,target){const minEvaluation=evaluatePmMinVersionBound(manifest.pm_min_version,target.pmVersion);const maxEvaluation=evaluatePmMaxVersionBound(manifest.pm_max_version,target.pmVersion,target.pmMaxVersionExceededMode??"block");const schema=lintExtensionManifestSchema(manifest);const schemaFindings=schema.findings.map(finding=>({code:finding.code,severity:"warning",constraint:"manifest",required:finding.code==="manifest_unknown_key"?finding.path:"pm_min_version",current:target.pmVersion,path:finding.path,...finding.suggested_key?{suggested_key:finding.suggested_key}:{},message:finding.message}));const compatibilityFindings=[];const minFinding=toCompatibilityFinding(minEvaluation,target.pmVersion);if(minFinding!==null){compatibilityFindings.push(minFinding)}const maxFinding=toCompatibilityFinding(maxEvaluation,target.pmVersion);if(maxFinding!==null){compatibilityFindings.push(maxFinding)}return{compatible:minEvaluation.allowed&&maxEvaluation.allowed,findings:[...schemaFindings,...compatibilityFindings],pmVersion:target.pmVersion}}const CAPABILITY_DRIFT_LINT_CODES=new Set(["capability_undeclared","capability_unused","manifest_capabilities_absent"]);function preflightExtension(blueprint,options={}){const blueprintResult=lintExtensionBlueprint(blueprint,{declaredCapabilities:options.declaredCapabilities});const manifest=options.identity?synthesizeExtensionManifest(blueprint,options.identity):null;const compatibility=options.target?checkExtensionManifestCompatibility(manifest??blueprint.manifest??{},options.target):null;const suppressCapabilityDrift=manifest!==null&&options.declaredCapabilities===void 0;const blueprintFindings=suppressCapabilityDrift?blueprintResult.findings.filter(finding=>!CAPABILITY_DRIFT_LINT_CODES.has(finding.code)):blueprintResult.findings;const findings=[...blueprintFindings.map(finding=>({source:"blueprint",severity:finding.severity,code:finding.code,message:finding.message})),...(compatibility?.findings??[]).map(finding=>({source:"compatibility",severity:finding.severity,code:finding.code,message:finding.message}))];return{ok:findings.every(finding=>finding.severity!=="error"),capabilities:blueprintResult.used,blueprint:blueprintResult,manifest,compatibility,findings}}export{checkExtensionManifestCompatibility,composeExtension,composeExtensionPackage,defineExtension,defineExtensionBlueprint,deriveExtensionCapabilities,describeExtensionBlueprint,inspectExtensionManifestSchema,lintExtensionBlueprint,lintExtensionManifestSchema,mergeExtensionBlueprints,preflightExtension,synthesizeExtensionManifest};
|
|
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]="52f6eff3-e226-56d9-893a-f16997d11c50")}catch{}})();import{normalizeKnownExtensionCapability,resolveLegacyExtensionCapabilityAlias}from"../core/extensions/extension-capability-aliases.js";import{normalizeCommandName}from"../core/extensions/extension-runtime-helpers.js";import{RESERVED_ITEM_FIELD_NAMES}from"../core/extensions/item-fields.js";import{describeExtensionLongFlagFailure,findExtensionFlagTokenFailure}from"../core/extensions/flag-definition-validation.js";import{evaluatePmMaxVersionBound,evaluatePmMinVersionBound}from"../core/extensions/version-compat.js";import{inspectExtensionManifestSchema,lintExtensionManifestSchema}from"../core/extensions/manifest-schema.js";function defineExtension(module){return module}function defineExtensionBlueprint(blueprint){return blueprint}function registerBlueprintCommandSurfaces(api,blueprint){for(const command of blueprint.commands??[])api.registerCommand(command);for(const[command,override]of Object.entries(blueprint.commandOverrides??{}))api.registerCommand(command,override);for(const[targetCommand,flags]of Object.entries(blueprint.flags??{}))api.registerFlags(targetCommand,flags);for(const[command,override]of Object.entries(blueprint.parsers??{}))api.registerParser(command,override);for(const[format,renderer]of Object.entries(blueprint.renderers??{}))if(typeof renderer=="function")api.registerRenderer(format,renderer);else{const{run,...ownership}=renderer;api.registerRenderer(format,run,ownership)}for(const[service,override]of Object.entries(blueprint.services??{}))api.registerService(service,override)}function registerBlueprintSchemaSurfaces(api,blueprint){for(const override of blueprint.preflights??[])api.registerPreflight(override);const itemTypes=blueprint.itemTypes??[];itemTypes.length>0&&api.registerItemTypes(itemTypes);const itemFields=blueprint.itemFields??[];itemFields.length>0&&api.registerItemFields(itemFields);const relationshipKinds=blueprint.relationshipKinds??[];relationshipKinds.length>0&&api.registerRelationshipKinds(relationshipKinds);for(const migration of blueprint.migrations??[])api.registerMigration(migration);for(const profile of blueprint.profiles??[])api.registerProfile(profile)}function registerBlueprintRetrievalSurfaces(api,blueprint){for(const provider of blueprint.searchProviders??[])api.registerSearchProvider(provider);for(const adapter of blueprint.vectorStoreAdapters??[])api.registerVectorStoreAdapter(adapter);for(const provider of blueprint.assuranceProviders??[])api.registerAssuranceMeasurementProvider(provider);for(const entry of blueprint.importers??[])api.registerImporter(entry.name,entry.importer,entry.options);for(const entry of blueprint.exporters??[])api.registerExporter(entry.name,entry.exporter,entry.options)}function registerBlueprintHooks(api,hooks){for(const hook of hooks.beforeCommand??[])api.hooks.beforeCommand(hook);for(const hook of hooks.beforeMutation??[])api.hooks.beforeMutation(hook);for(const hook of hooks.afterCommand??[])api.hooks.afterCommand(hook);for(const hook of hooks.onWrite??[])api.hooks.onWrite(hook);for(const hook of hooks.onRead??[])api.hooks.onRead(hook);for(const hook of hooks.onIndex??[])api.hooks.onIndex(hook)}function composeExtension(blueprint){const module={activate:async api=>{registerBlueprintCommandSurfaces(api,blueprint),registerBlueprintSchemaSurfaces(api,blueprint),registerBlueprintRetrievalSurfaces(api,blueprint),registerBlueprintHooks(api,blueprint.hooks??{}),await blueprint.activate?.(api)}};return blueprint.manifest&&(module.manifest=blueprint.manifest),blueprint.deactivate&&(module.deactivate=blueprint.deactivate),module}function mergeArraySurface(surfaces){const merged=surfaces.flatMap(surface=>surface??[]);return merged.length>0?merged:void 0}function mergeHandlerRecord(surfaces){const merged=Object.assign({},...surfaces.map(surface=>surface??{}));return Object.keys(merged).length>0?merged:void 0}function mergeFlagRecord(surfaces){const merged={};for(const surface of surfaces)for(const[command,flags]of Object.entries(surface??{}))merged[command]=[...merged[command]??[],...flags];return Object.keys(merged).length>0?merged:void 0}const EXTENSION_BLUEPRINT_HOOK_KEYS=["beforeCommand","beforeMutation","afterCommand","onWrite","onRead","onIndex"],EXTENSION_BLUEPRINT_HOOK_KEY_COVERAGE={};function assignMergedHookSurface(merged,surfaces,key){const hookArrays=surfaces.map(hooks=>hooks?.[key]),value=mergeArraySurface(hookArrays);if(value!==void 0){const typedMerged=merged;typedMerged[key]=value}}function mergeHookSurfaces(surfaces){const merged={};for(const key of EXTENSION_BLUEPRINT_HOOK_KEYS)assignMergedHookSurface(merged,surfaces,key);return Object.keys(merged).length>0?merged:void 0}function mergeExtensionBlueprints(...blueprints){const merged={},assign=(key,value)=>{value!==void 0&&(merged[key]=value)};assign("commands",mergeArraySurface(blueprints.map(blueprint=>blueprint.commands))),assign("commandOverrides",mergeHandlerRecord(blueprints.map(blueprint=>blueprint.commandOverrides))),assign("flags",mergeFlagRecord(blueprints.map(blueprint=>blueprint.flags))),assign("parsers",mergeHandlerRecord(blueprints.map(blueprint=>blueprint.parsers))),assign("renderers",mergeHandlerRecord(blueprints.map(blueprint=>blueprint.renderers))),assign("services",mergeHandlerRecord(blueprints.map(blueprint=>blueprint.services))),assign("preflights",mergeArraySurface(blueprints.map(blueprint=>blueprint.preflights))),assign("itemTypes",mergeArraySurface(blueprints.map(blueprint=>blueprint.itemTypes))),assign("itemFields",mergeArraySurface(blueprints.map(blueprint=>blueprint.itemFields))),assign("relationshipKinds",mergeArraySurface(blueprints.map(blueprint=>blueprint.relationshipKinds))),assign("migrations",mergeArraySurface(blueprints.map(blueprint=>blueprint.migrations))),assign("profiles",mergeArraySurface(blueprints.map(blueprint=>blueprint.profiles))),assign("searchProviders",mergeArraySurface(blueprints.map(blueprint=>blueprint.searchProviders))),assign("vectorStoreAdapters",mergeArraySurface(blueprints.map(blueprint=>blueprint.vectorStoreAdapters))),assign("assuranceProviders",mergeArraySurface(blueprints.map(blueprint=>blueprint.assuranceProviders))),assign("importers",mergeArraySurface(blueprints.map(blueprint=>blueprint.importers))),assign("exporters",mergeArraySurface(blueprints.map(blueprint=>blueprint.exporters))),assign("hooks",mergeHookSurfaces(blueprints.map(blueprint=>blueprint.hooks)));let manifest;for(const blueprint of blueprints)blueprint.manifest&&(manifest=blueprint.manifest);assign("manifest",manifest);const hasActivates=blueprints.some(blueprint=>blueprint.activate);assign("activate",hasActivates?async api=>{for(const blueprint of blueprints)blueprint.activate&&await blueprint.activate(api)}:void 0);const hasDeactivates=blueprints.some(blueprint=>blueprint.deactivate);return assign("deactivate",hasDeactivates?async()=>{const errors=[];for(const blueprint of[...blueprints].reverse())if(blueprint.deactivate)try{await blueprint.deactivate()}catch(error){errors.push(error)}if(errors.length>0)throw errors.length>1?new AggregateError(errors,"Multiple extension blueprint deactivate hooks failed."):errors[0]}:void 0),merged}const BLUEPRINT_FIELD_CAPABILITIES=[["commands","commands"],["commandOverrides","commands"],["flags","schema"],["itemTypes","schema"],["itemFields","schema"],["relationshipKinds","schema"],["migrations","schema"],["profiles","schema"],["parsers","parser"],["renderers","renderers"],["services","services"],["preflights","preflight"],["searchProviders","search"],["vectorStoreAdapters","search"],["assuranceProviders","services"],["importers","importers"],["exporters","importers"]];function hasEntries(value){return value?Array.isArray(value)?value.length>0:Object.keys(value).length>0:!1}function deriveExtensionCapabilities(blueprint){const capabilities=new Set;for(const[field,capability]of BLUEPRINT_FIELD_CAPABILITIES)hasEntries(blueprint[field])&&capabilities.add(capability);(blueprint.commands??[]).filter(isPresent).some(command=>command.flags!==void 0)&&capabilities.add("schema");const importExportEntries=[...blueprint.importers??[],...blueprint.exporters??[]].filter(isPresent);importExportEntries.some(entry=>entry?.options?.flags!==void 0)&&capabilities.add("schema"),importExportEntries.some(entry=>typeof entry=="object")&&capabilities.add("commands");const hooks=blueprint.hooks??{};return[hooks.beforeCommand,hooks.beforeMutation,hooks.afterCommand,hooks.onWrite,hooks.onRead,hooks.onIndex].some(hasEntries)&&capabilities.add("hooks"),[...capabilities].sort((left,right)=>left.localeCompare(right))}const BLUEPRINT_HOOK_FIELD_TO_KIND=[["beforeCommand","before_command"],["beforeMutation","before_mutation"],["afterCommand","after_command"],["onWrite","on_write"],["onRead","on_read"],["onIndex","on_index"]];function sortUnique(values){return[...new Set(values)].sort((left,right)=>left.localeCompare(right))}function isPresent(value){return value!=null}function importerCommandPath(entry){return normalizeCommandName(`${entry.name} import`)}function exporterCommandPath(entry){return normalizeCommandName(`${entry.name} export`)}function collectBlueprintCommandPaths(commands,importers,exporters){return[...commands.map(command=>normalizeCommandName(command.name)),...importers.filter(entry=>entry.options!==void 0).map(importerCommandPath),...exporters.filter(entry=>entry.options!==void 0).map(exporterCommandPath)]}function collectBlueprintFlagCommands(blueprint,commands,importers,exporters){return[...Object.keys(blueprint.flags??{}).map(command=>normalizeCommandName(command)),...commands.filter(command=>command.flags!==void 0).map(command=>normalizeCommandName(command.name)),...importers.filter(entry=>entry.options?.flags!==void 0).map(importerCommandPath),...exporters.filter(entry=>entry.options?.flags!==void 0).map(exporterCommandPath)]}function collectBlueprintHookKinds(hooks){return BLUEPRINT_HOOK_FIELD_TO_KIND.filter(([field])=>(hooks[field]?.length??0)>0).map(([,kind])=>kind)}function collectBlueprintRendererOwnership(renderers){const ownership=Object.entries(renderers??{}).filter(([,renderer])=>typeof renderer!="function"&&((renderer.commands?.length??0)>0||renderer.resultDiscriminator!==void 0)).map(([format,renderer])=>{const scoped=renderer;return{format,commands:sortUnique((scoped.commands??[]).map(command=>normalizeCommandName(command))),result_discriminator:scoped.resultDiscriminator!==void 0}}).sort((left,right)=>left.format.localeCompare(right.format));return ownership.length>0?{renderer_ownership:ownership}:{}}function collectBlueprintAssuranceProviders(providers){return!providers||providers.length===0?{}:{assurance_providers:sortUnique(providers.map(provider=>provider.id))}}function collectBlueprintSurfaceSummary(blueprint,importers,exporters){return{item_types:sortUnique((blueprint.itemTypes??[]).map(type=>type.name)),item_fields:sortUnique((blueprint.itemFields??[]).map(field=>field.name)),...(blueprint.relationshipKinds?.length??0)>0?{relationship_kinds:sortUnique(blueprint.relationshipKinds.map(definition=>definition.kind))}:{},migrations:sortUnique((blueprint.migrations??[]).flatMap(migration=>typeof migration.id=="string"?[migration.id]:[])),profiles:sortUnique((blueprint.profiles??[]).map(profile=>profile.name)),importers:sortUnique(importers.map(entry=>normalizeCommandName(entry.name))),exporters:sortUnique(exporters.map(entry=>normalizeCommandName(entry.name))),search_providers:sortUnique((blueprint.searchProviders??[]).map(provider=>provider.name)),vector_store_adapters:sortUnique((blueprint.vectorStoreAdapters??[]).map(adapter=>adapter.name)),...collectBlueprintAssuranceProviders(blueprint.assuranceProviders),parser_overrides:sortUnique(Object.keys(blueprint.parsers??{}).map(command=>normalizeCommandName(command))),service_overrides:sortUnique(Object.keys(blueprint.services??{}).map(service=>String(service).trim().toLowerCase())),renderer_overrides:sortUnique(Object.keys(blueprint.renderers??{}).map(format=>String(format).trim().toLowerCase())),...collectBlueprintRendererOwnership(blueprint.renderers),preflight_overrides:(blueprint.preflights??[]).length,preflight_ownership:(blueprint.preflights??[]).map(preflight=>({commands:[...preflight.commands??[]]}))}}function describeExtensionBlueprint(blueprint){const commands=(blueprint.commands??[]).filter(isPresent),importers=(blueprint.importers??[]).filter(isPresent),exporters=(blueprint.exporters??[]).filter(isPresent),importerPaths=importers.map(importerCommandPath),exporterPaths=exporters.map(exporterCommandPath),commandPaths=collectBlueprintCommandPaths(commands,importers,exporters),flagCommands=collectBlueprintFlagCommands(blueprint,commands,importers,exporters),hooks=blueprint.hooks??{},surfaces=collectBlueprintSurfaceSummary(blueprint,importers,exporters);return{capabilities:deriveExtensionCapabilities(blueprint),commands:sortUnique(commandPaths),command_overrides:sortUnique(Object.keys(blueprint.commandOverrides??{}).map(command=>normalizeCommandName(command))),command_handlers:sortUnique([...commandPaths,...importerPaths,...exporterPaths]),hooks:collectBlueprintHookKinds(hooks),flag_commands:sortUnique(flagCommands),...surfaces}}const BLUEPRINT_LINTABLE_SURFACE_FIELDS=["commands","commandOverrides","flags","parsers","renderers","services","preflights","itemTypes","itemFields","relationshipKinds","migrations","profiles","searchProviders","vectorStoreAdapters","assuranceProviders","importers","exporters"];function collectReservedItemFieldFindings(blueprint){return(blueprint.itemFields??[]).filter(field=>typeof field?.name=="string"&&RESERVED_ITEM_FIELD_NAMES.has(field.name.trim())).map(field=>({code:"reserved_item_field",severity:"error",message:`Item field "${field.name}" collides with reserved item metadata; rename it with an extension-specific prefix before publishing.`,field:field.name}))}function collectBlueprintFlagFindings(blueprint){return[...Object.values(blueprint.flags??{}).flat(),...(blueprint.commands??[]).flatMap(command=>command.flags??[]),...(blueprint.importers??[]).flatMap(entry=>entry.options?.flags??[]),...(blueprint.exporters??[]).flatMap(entry=>entry.options?.flags??[])].flatMap(definition=>{if(typeof definition?.long!="string"&&typeof definition?.short!="string")return[];const finding=findExtensionFlagTokenFailure(definition.long,definition.short);if(finding===null)return[];const{token,failure}=finding;return[{code:failure,severity:"error",message:`Flag "${token}" ${describeExtensionLongFlagFailure(token,failure)}.`,field:token}]})}function normalizeDeclaredCapabilities(capabilities){const known=new Set;for(const capability of capabilities){const normalized=resolveLegacyExtensionCapabilityAlias(capability)??normalizeKnownExtensionCapability(capability);normalized!==null&&known.add(normalized)}return[...known].sort((left,right)=>left.localeCompare(right))}function collectBlueprintCapabilityFindings(used,declared){const findings=[];if(declared===null)return used.length>0&&findings.push({code:"manifest_capabilities_absent",severity:"warning",message:`Blueprint exercises ${used.length===1?"capability":"capabilities"} [${used.join(", ")}] but declares none; set capabilities to deriveExtensionCapabilities(blueprint) so the manifest grant matches.`}),findings;const declaredSet=new Set(declared),usedSet=new Set(used);for(const capability of used)declaredSet.has(capability)||findings.push({code:"capability_undeclared",severity:"error",message:`Blueprint exercises capability "${capability}" but it is absent from the declared capabilities; activation throws extension_capability_missing \u2014 add "${capability}" to the manifest capabilities.`,capability});for(const capability of declared)usedSet.has(capability)||findings.push({code:"capability_unused",severity:"warning",message:`Capability "${capability}" is declared but no blueprint surface exercises it; drop it to keep the manifest least-privilege (pm package doctor reports this as extension_capability_unused).`,capability});return findings}function collectBlueprintCommandFindings(blueprint){const findings=[],commandPathCounts=new Map;for(const command of blueprint.commands??[]){const path=normalizeCommandName(command.name);commandPathCounts.set(path,(commandPathCounts.get(path)??0)+1)}for(const[path,count]of commandPathCounts)count>1&&findings.push({code:"duplicate_command",severity:"warning",message:`Command "${path}" is declared ${count} times in commands; the later registration shadows the earlier one at dispatch.`,command:path});const overridePaths=new Set(Object.keys(blueprint.commandOverrides??{}).map(command=>normalizeCommandName(command)));for(const path of commandPathCounts.keys())overridePaths.has(path)&&findings.push({code:"command_override_conflict",severity:"warning",message:`Command "${path}" is declared both as a new command definition and as a command override; register one or the other.`,command:path});return findings}function collectBlueprintEmptySurfaceFindings(blueprint){const findings=[];for(const field of BLUEPRINT_LINTABLE_SURFACE_FIELDS)field in blueprint&&!hasEntries(blueprint[field])&&findings.push({code:"empty_surface",severity:"warning",message:`Blueprint field "${field}" is present but empty; remove it or populate it.`,field});if("hooks"in blueprint){const hooks=blueprint.hooks??{};[hooks.beforeCommand,hooks.beforeMutation,hooks.afterCommand,hooks.onWrite,hooks.onRead,hooks.onIndex].some(hasEntries)||findings.push({code:"empty_surface",severity:"warning",message:'Blueprint field "hooks" is present but registers no lifecycle hooks; remove it or populate it.',field:"hooks"})}return findings}function lintExtensionBlueprint(blueprint,options={}){const used=deriveExtensionCapabilities(blueprint),declaredSource=options.declaredCapabilities??blueprint.manifest?.capabilities,declared=Array.isArray(declaredSource)?normalizeDeclaredCapabilities(declaredSource):null,findings=[...collectBlueprintCapabilityFindings(used,declared),...collectBlueprintCommandFindings(blueprint),...collectBlueprintFlagFindings(blueprint),...collectReservedItemFieldFindings(blueprint),...collectBlueprintEmptySurfaceFindings(blueprint)];return{ok:findings.every(finding=>finding.severity!=="error"),findings,used,declared}}function synthesizeExtensionManifest(blueprint,identity){const{additionalCapabilities,...manifestIdentity}=identity,extra=Array.isArray(additionalCapabilities)?normalizeDeclaredCapabilities(additionalCapabilities):[],capabilities=[...new Set([...deriveExtensionCapabilities(blueprint),...extra])].sort((left,right)=>left.localeCompare(right));return{...manifestIdentity,capabilities}}function composeExtensionPackage(blueprint,identity){const manifest=synthesizeExtensionManifest(blueprint,identity);return{module:composeExtension({...blueprint,manifest}),manifest}}function toCompatibilityFinding(evaluation,pmVersion){if(evaluation.status==="absent"||evaluation.status==="ok")return null;const code=`${evaluation.kind}_${evaluation.status}`;let message="";switch(code){case"pm_min_version_invalid":message=`pm_min_version "${evaluation.required}" is not a valid version; the extension is treated as incompatible and the loader skips it.`;break;case"pm_min_version_unchecked":message=`pm_min_version "${evaluation.required}" could not be compared against pm ${pmVersion}; compatibility is unverified.`;break;case"pm_min_version_unmet":message=`Requires pm >= ${evaluation.required} but the target is pm ${pmVersion}; the loader skips the extension.`;break;case"pm_max_version_invalid":message=`pm_max_version "${evaluation.required}" is not a valid inclusive upper bound (version ranges are not allowed); the extension is treated as incompatible and the loader skips it.`;break;case"pm_max_version_unchecked":message=`pm_max_version "${evaluation.required}" could not be compared against pm ${pmVersion}; compatibility is unverified.`;break;case"pm_max_version_exceeded":message=`Allows pm <= ${evaluation.required} but the target is pm ${pmVersion}; the loader skips the extension.`;break;case"pm_max_version_exceeded_warn":message=`Target pm ${pmVersion} is newer than pm_max_version ${evaluation.required}, but the "warn" exceeded mode lets it load with a warning.`;break}return{code,severity:evaluation.allowed?"warning":"error",constraint:evaluation.kind,required:evaluation.required,current:pmVersion,message}}function checkExtensionManifestCompatibility(manifest,target){const minEvaluation=evaluatePmMinVersionBound(manifest.pm_min_version,target.pmVersion),maxEvaluation=evaluatePmMaxVersionBound(manifest.pm_max_version,target.pmVersion,target.pmMaxVersionExceededMode??"block"),schemaFindings=lintExtensionManifestSchema(manifest).findings.map(finding=>({code:finding.code,severity:"warning",constraint:"manifest",required:finding.code==="manifest_unknown_key"?finding.path:"pm_min_version",current:target.pmVersion,path:finding.path,...finding.suggested_key?{suggested_key:finding.suggested_key}:{},message:finding.message})),compatibilityFindings=[],minFinding=toCompatibilityFinding(minEvaluation,target.pmVersion);minFinding!==null&&compatibilityFindings.push(minFinding);const maxFinding=toCompatibilityFinding(maxEvaluation,target.pmVersion);return maxFinding!==null&&compatibilityFindings.push(maxFinding),{compatible:minEvaluation.allowed&&maxEvaluation.allowed,findings:[...schemaFindings,...compatibilityFindings],pmVersion:target.pmVersion}}const CAPABILITY_DRIFT_LINT_CODES=new Set(["capability_undeclared","capability_unused","manifest_capabilities_absent"]);function preflightExtension(blueprint,options={}){const blueprintResult=lintExtensionBlueprint(blueprint,{declaredCapabilities:options.declaredCapabilities}),manifest=options.identity?synthesizeExtensionManifest(blueprint,options.identity):null,compatibility=options.target?checkExtensionManifestCompatibility(manifest??blueprint.manifest??{},options.target):null,findings=[...(manifest!==null&&options.declaredCapabilities===void 0?blueprintResult.findings.filter(finding=>!CAPABILITY_DRIFT_LINT_CODES.has(finding.code)):blueprintResult.findings).map(finding=>({source:"blueprint",severity:finding.severity,code:finding.code,message:finding.message})),...(compatibility?.findings??[]).map(finding=>({source:"compatibility",severity:finding.severity,code:finding.code,message:finding.message}))];return{ok:findings.every(finding=>finding.severity!=="error"),capabilities:blueprintResult.used,blueprint:blueprintResult,manifest,compatibility,findings}}export{checkExtensionManifestCompatibility,composeExtension,composeExtensionPackage,defineExtension,defineExtensionBlueprint,deriveExtensionCapabilities,describeExtensionBlueprint,inspectExtensionManifestSchema,lintExtensionBlueprint,lintExtensionManifestSchema,mergeExtensionBlueprints,preflightExtension,synthesizeExtensionManifest};
|
|
2
2
|
//# sourceMappingURL=compose.js.map
|
package/dist/sdk/config.js
CHANGED
|
@@ -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]="a6fdd2eb-5447-5b10-af5b-33765e341bd2")}catch(e2){}})();import{resolveConfigPositionalValue}from"../core/config/positional-value.js";import{NESTED_SETTING_DESCRIPTORS,parseNestedSettingValue,readNestedSettingValue,resolveNestedSettingDescriptor,writeNestedSettingValue}from"../core/config/nested-settings.js";import{getActiveExtensionRegistrations}from"../core/extensions/index.js";import{normalizeParentReferencePolicy}from"../core/item/parent-reference-policy.js";import{normalizeSprintReleaseFormatPolicy}from"../core/item/sprint-release-format.js";import{resolveItemTypeRegistry,resolveTypeName}from"../core/item/type-registry.js";import{buildInvalidTypeError}from"../core/schema/item-types-file.js";import{resolveItemTypesFilePath}from"../core/schema/runtime-schema.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{createUnknownSubcommandError}from"./agent/subcommand-recovery.js";import{planAgentIdentityVocabularyMutation,summarizeAgentIdentityVocabulary}from"./agent/identity-config.js";import{assertInitializedTracker}from"./environment/tracker-preflight.js";import{migrateItemFilesToFormat}from"../core/store/item-format-migration.js";import{getSettingsPath,resolveGlobalPmRoot,resolvePmRoot}from"../core/store/paths.js";import{readSettingsWithMetadata,writeSettings}from"../core/store/settings.js";import{CONTEXT_DEPTH_VALUES}from"../types/index.js";const CONFIG_SCOPE_VALUES=["project","global"];const CONFIG_KEY_ALIASES={definition_of_done:["definition-of-done","definition_of_done"],item_format:["item-format","item_format"],history_missing_stream_policy:["history-missing-stream-policy","history_missing_stream_policy"],sprint_release_format_policy:["sprint-release-format-policy","sprint_release_format_policy"],parent_reference_policy:["parent-reference-policy","parent_reference_policy"],metadata_validation_profile:["metadata-validation-profile","metadata_validation_profile"],metadata_required_fields:["metadata-required-fields","metadata_required_fields"],lifecycle_stale_blocker_reason_patterns:["lifecycle-stale-blocker-reason-patterns","lifecycle_stale_blocker_reason_patterns"],lifecycle_closure_like_blocked_reason_patterns:["lifecycle-closure-like-blocked-reason-patterns","lifecycle_closure_like_blocked_reason_patterns"],lifecycle_closure_like_resolution_patterns:["lifecycle-closure-like-resolution-patterns","lifecycle_closure_like_resolution_patterns"],lifecycle_closure_like_actual_result_patterns:["lifecycle-closure-like-actual-result-patterns","lifecycle_closure_like_actual_result_patterns"],governance_preset:["governance-preset","governance_preset"],governance_ownership_enforcement:["governance-ownership-enforcement","governance_ownership_enforcement"],governance_create_mode_default:["governance-create-mode-default","governance_create_mode_default"],governance_close_validation_default:["governance-close-validation-default","governance_close_validation_default"],governance_require_close_reason:["governance-require-close-reason","governance_require_close_reason"],governance_create_default_type:["governance-create-default-type","governance_create_default_type"],governance_workflow_enforcement:["governance-workflow-enforcement","governance_workflow_enforcement"],governance_parent_reference_policy:["governance-parent-reference-policy","governance_parent_reference_policy"],governance_metadata_validation_profile:["governance-metadata-validation-profile","governance_metadata_validation_profile"],governance_force_required_for_stale_lock:["governance-force-required-for-stale-lock","governance_force_required_for_stale_lock"],test_result_tracking:["test-result-tracking","test_result_tracking"],untrusted_linked_test_execution:["untrusted-linked-test-execution","untrusted_linked_test_execution"],telemetry_tracking:["telemetry-tracking","telemetry_tracking"],agent_identity_vocabulary:["agent-identity-vocabulary","agent_identity_vocabulary"],context:["context"]};const CANONICAL_CONFIG_KEYS=Object.keys(CONFIG_KEY_ALIASES).map(candidate=>CONFIG_KEY_ALIASES[candidate][0]);const CONFIG_KEY_BY_ALIAS=Object.fromEntries(Object.keys(CONFIG_KEY_ALIASES).flatMap(key=>CONFIG_KEY_ALIASES[key].map(alias=>[alias,key])));const CONFIG_KEY_SUMMARIES={definition_of_done:"Definition of Done criteria list.",item_format:"Default item file format.",history_missing_stream_policy:"Missing history stream handling policy.",sprint_release_format_policy:"Sprint/release format validation policy.",parent_reference_policy:"Parent reference validation policy.",metadata_validation_profile:"Validate metadata profile policy (core|strict|custom).",metadata_required_fields:"Validate custom metadata required-fields list.",lifecycle_stale_blocker_reason_patterns:"Validate lifecycle stale-blocker reason substring patterns (criteria list).",lifecycle_closure_like_blocked_reason_patterns:"Validate lifecycle closure-like blocked_reason substring patterns (criteria list).",lifecycle_closure_like_resolution_patterns:"Validate lifecycle closure-like resolution substring patterns (criteria list).",lifecycle_closure_like_actual_result_patterns:"Validate lifecycle closure-like actual_result substring patterns (criteria list).",governance_preset:"Governance preset policy (minimal|default|strict|custom).",governance_ownership_enforcement:"Governance ownership enforcement policy (none|warn|strict).",governance_create_mode_default:"Governance default create mode (progressive|strict).",governance_close_validation_default:"Governance default close validation mode (off|warn|strict).",governance_require_close_reason:"Governance close-reason requirement policy (enabled|disabled).",governance_create_default_type:"Governance default item type for `pm create` when --type is omitted.",governance_workflow_enforcement:"Governance per-type transition enforcement mode (off|warn|strict).",governance_parent_reference_policy:"Governance parent reference policy (warn|strict_error).",governance_metadata_validation_profile:"Governance metadata validation profile (core|strict|custom).",governance_force_required_for_stale_lock:"Governance stale-lock force policy (enabled|disabled).",test_result_tracking:"Item-level linked test result persistence policy.",untrusted_linked_test_execution:"Permit an explicit per-run override for commands not trusted by this clone.",telemetry_tracking:"Telemetry usage reporting policy.",agent_identity_vocabulary:"Versioned exact legacy-author interpretation vocabulary (summary only).",context:"Context command settings (depth, section toggles, limits)."};const LIFECYCLE_PATTERN_CONFIG_KEYS=["lifecycle_stale_blocker_reason_patterns","lifecycle_closure_like_blocked_reason_patterns","lifecycle_closure_like_resolution_patterns","lifecycle_closure_like_actual_result_patterns"];const CRITERIA_CONFIG_KEYS=new Set(["metadata_required_fields",...LIFECYCLE_PATTERN_CONFIG_KEYS]);const TRACKING_CONFIG_KEYS=new Set(["test_result_tracking","untrusted_linked_test_execution","telemetry_tracking"]);const GOVERNANCE_BOOLEAN_CONFIG_KEYS=new Set(["governance_require_close_reason","governance_force_required_for_stale_lock"]);const GOVERNANCE_POLICY_CONFIG_KEYS=new Set(["governance_ownership_enforcement","governance_create_mode_default","governance_close_validation_default"]);const GOVERNANCE_VALIDATION_CONFIG_KEYS=new Set(["governance_parent_reference_policy","governance_metadata_validation_profile","governance_workflow_enforcement"]);const GOVERNANCE_PRESET_OR_TYPE_CONFIG_KEYS=new Set(["governance_preset","governance_create_default_type"]);const isCriteriaValueConfigKey=key=>CRITERIA_CONFIG_KEYS.has(key);const isGovernancePolicyConfigKey=key=>GOVERNANCE_POLICY_CONFIG_KEYS.has(key);const isGovernanceValidationConfigKey=key=>GOVERNANCE_VALIDATION_CONFIG_KEYS.has(key);const isGovernancePresetOrTypeConfigKey=key=>GOVERNANCE_PRESET_OR_TYPE_CONFIG_KEYS.has(key);function isCriteriaConfigKey(key){return key==="definition_of_done"||isCriteriaValueConfigKey(key)}function normalizeScope(value){if(CONFIG_SCOPE_VALUES.includes(value)){return value}throw new PmCliError(`Invalid config scope "${value}". Allowed: ${CONFIG_SCOPE_VALUES.join(", ")}`,EXIT_CODE.USAGE)}function normalizeAction(value){if(value==="get"||value==="set"||value==="list"||value==="export"){return value}throw createUnknownSubcommandError({command_path:"config",token:value.trim()||"<empty>",allowed:["export","get","list","set"],token_kind:"action"})}function normalizeKey(value){const key=CONFIG_KEY_BY_ALIAS[value];if(key){return key}const nestedKeys=NESTED_SETTING_DESCRIPTORS.map(descriptor=>descriptor.key).join(", ");throw new PmCliError(`Invalid config key "${value}". Supported: ${CANONICAL_CONFIG_KEYS.join(", ")} (underscore variants also accepted). Nested leaf settings: ${nestedKeys}.`,EXIT_CODE.USAGE)}function normalizeCriteria(values,clearCriteria){const normalized=[...new Set((values??[]).map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right));if(clearCriteria){if(normalized.length>0){throw new PmCliError("Config set definition-of-done cannot combine --clear-criteria with --criterion values",EXIT_CODE.USAGE)}return[]}if(normalized.length===0){throw new PmCliError("Config set definition-of-done requires at least one non-empty --criterion value (or --clear-criteria to clear)",EXIT_CODE.USAGE)}return normalized}function normalizeItemFormat(value){const normalized=value?.trim().toLowerCase();if(normalized==="toon"){return"toon"}if(normalized==="json_markdown"){throw new PmCliError("Config set item-format no longer accepts json_markdown. Markdown item files are legacy read/migration input only.",EXIT_CODE.USAGE)}throw new PmCliError("Config set item-format requires --format toon",EXIT_CODE.USAGE)}function normalizeHistoryMissingStreamPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="auto_create"||normalized==="strict_error"){return normalized}throw new PmCliError("Config set history-missing-stream-policy requires --policy with one of: auto_create, strict_error",EXIT_CODE.USAGE)}function normalizeTestResultTrackingPolicy(value){return normalizeEnabledDisabledPolicy(value,"test-result-tracking")}function normalizeEnabledDisabledPolicy(value,key){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="enabled"||normalized==="disabled"){return normalized}throw new PmCliError(`Config set ${key} requires --policy with one of: enabled, disabled`,EXIT_CODE.USAGE)}function normalizeTelemetryTrackingPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="enabled"||normalized==="disabled"){return normalized}throw new PmCliError("Config set telemetry-tracking requires --policy with one of: enabled, disabled",EXIT_CODE.USAGE)}function normalizeValidateMetadataProfile(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="core"||normalized==="strict"||normalized==="custom"){return normalized}throw new PmCliError("Config set metadata-validation-profile requires --policy with one of: core, strict, custom",EXIT_CODE.USAGE)}function normalizeGovernancePreset(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="minimal"||normalized==="default"||normalized==="strict"||normalized==="custom"){return normalized}throw new PmCliError("Config set governance-preset requires --policy with one of: minimal, default, strict, custom",EXIT_CODE.USAGE)}function normalizeGovernanceOwnershipEnforcement(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="none"||normalized==="warn"||normalized==="strict"){return normalized}throw new PmCliError("Config set governance-ownership-enforcement requires --policy with one of: none, warn, strict",EXIT_CODE.USAGE)}function normalizeGovernanceCreateModeDefault(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="progressive"||normalized==="strict"){return normalized}throw new PmCliError("Config set governance-create-mode-default requires --policy with one of: progressive, strict",EXIT_CODE.USAGE)}function normalizeGovernanceCloseValidationDefault(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="off"||normalized==="warn"||normalized==="strict"){return normalized}if(normalized==="none"||normalized==="disabled"){return"off"}throw new PmCliError("Config set governance-close-validation-default requires --policy with one of: off, warn, strict",EXIT_CODE.USAGE)}function normalizeGovernanceWorkflowEnforcement(value){const normalized=typeof value==="string"?value.trim().toLowerCase().replaceAll("-","_"):void 0;if(normalized==="off"||normalized==="warn"||normalized==="strict"){return normalized}if(normalized==="none"||normalized==="disabled"){return"off"}throw new PmCliError("Config set governance-workflow-enforcement requires one of: off, warn, strict",EXIT_CODE.USAGE)}function normalizeGovernanceForceRequiredForStaleLockPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="enabled"||normalized==="disabled"){return normalized}throw new PmCliError("Config set governance-force-required-for-stale-lock requires --policy with one of: enabled, disabled",EXIT_CODE.USAGE)}function normalizeGovernanceRequireCloseReasonPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="enabled"||normalized==="disabled"){return normalized}throw new PmCliError("Config set governance-require-close-reason requires --policy with one of: enabled, disabled",EXIT_CODE.USAGE)}const ENABLED_DISABLED_CONFLICT_POLICY_KEYS={test_result_tracking:"test-result-tracking",untrusted_linked_test_execution:"untrusted-linked-test-execution"};function normalizePolicyForConflict(key,value){const enabledDisabledKey=ENABLED_DISABLED_CONFLICT_POLICY_KEYS[key];if(enabledDisabledKey){return normalizeEnabledDisabledPolicy(value,enabledDisabledKey)}switch(key){case"history_missing_stream_policy":return normalizeHistoryMissingStreamPolicy(value);case"sprint_release_format_policy":return normalizeSprintReleaseFormatPolicy(value);case"parent_reference_policy":case"governance_parent_reference_policy":return normalizeParentReferencePolicy(value);case"metadata_validation_profile":case"governance_metadata_validation_profile":return normalizeValidateMetadataProfile(value);case"governance_preset":return normalizeGovernancePreset(value);case"governance_ownership_enforcement":return normalizeGovernanceOwnershipEnforcement(value);case"governance_create_mode_default":return normalizeGovernanceCreateModeDefault(value);case"governance_close_validation_default":return normalizeGovernanceCloseValidationDefault(value);case"governance_require_close_reason":return normalizeGovernanceRequireCloseReasonPolicy(value);case"governance_workflow_enforcement":return normalizeGovernanceWorkflowEnforcement(value);case"governance_force_required_for_stale_lock":return normalizeGovernanceForceRequiredForStaleLockPolicy(value);case"telemetry_tracking":return normalizeTelemetryTrackingPolicy(value);default:return value.trim().toLowerCase().replaceAll("-","_")}}const METADATA_REQUIRED_FIELD_ALIAS_MAP={author:"author",acceptance_criteria:"acceptance_criteria","acceptance-criteria":"acceptance_criteria",estimated_minutes:"estimated_minutes","estimated-minutes":"estimated_minutes",estimate:"estimated_minutes",close_reason:"close_reason","close-reason":"close_reason",reviewer:"reviewer",risk:"risk",confidence:"confidence",sprint:"sprint",release:"release"};const METADATA_REQUIRED_FIELD_OPTIONS=["author","acceptance_criteria","estimated_minutes","close_reason","reviewer","risk","confidence","sprint","release"];function normalizeMetadataRequiredFields(values,clearCriteria){const normalized=[...new Set((values??[]).map(value=>value.trim()).filter(value=>value.length>0))];if(clearCriteria){if(normalized.length>0){throw new PmCliError("Config set metadata-required-fields cannot combine --clear-criteria with --criterion values",EXIT_CODE.USAGE)}return[]}if(normalized.length===0){throw new PmCliError("Config set metadata-required-fields requires at least one --criterion value (or --clear-criteria to clear)",EXIT_CODE.USAGE)}const lowered=normalized.map(value=>value.toLowerCase().replaceAll("-","_"));const unsupported=lowered.filter(value=>METADATA_REQUIRED_FIELD_ALIAS_MAP[value]===void 0);if(unsupported.length>0){throw new PmCliError(`Config set metadata-required-fields received unsupported values: ${unsupported.join(", ")}. Supported values: ${METADATA_REQUIRED_FIELD_OPTIONS.join(", ")}`,EXIT_CODE.USAGE)}return[...new Set(lowered.map(value=>METADATA_REQUIRED_FIELD_ALIAS_MAP[value]))].sort((left,right)=>left.localeCompare(right))}function normalizeLifecyclePatternCriteria(key,values,clearCriteria){const normalized=[...new Set((values??[]).map(value=>value.trim().toLowerCase()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right));if(clearCriteria){if(normalized.length>0){throw new PmCliError(`Config set ${CONFIG_KEY_ALIASES[key][0]} cannot combine --clear-criteria with --criterion values`,EXIT_CODE.USAGE)}return[]}if(normalized.length===0){throw new PmCliError(`Config set ${CONFIG_KEY_ALIASES[key][0]} requires at least one --criterion value (or --clear-criteria to clear)`,EXIT_CODE.USAGE)}return normalized}function normalizeWarnings(values){return[...new Set(values)].sort((left,right)=>left.localeCompare(right))}function normalizeKeyForAction(action,value){if(action==="list"||action==="export"){if(typeof value==="string"&&value.trim().length>0){throw new PmCliError(`Config action "${action}" does not accept <key>`,EXIT_CODE.USAGE)}return void 0}if(typeof value!=="string"||value.trim().length===0){throw new PmCliError(`Config action "${action}" requires <key>`,EXIT_CODE.USAGE)}return normalizeKey(value)}function assertConfigKeyDefined(key){if(!key){throw new PmCliError("Config action requires <key>",EXIT_CODE.USAGE)}}const CONFIG_VALUE_READERS={definition_of_done:settings=>[...settings.workflow.definition_of_done],item_format:settings=>settings.item_format,history_missing_stream_policy:settings=>settings.history.missing_stream,sprint_release_format_policy:settings=>settings.validation.sprint_release_format,parent_reference_policy:settings=>settings.validation.parent_reference,metadata_validation_profile:settings=>settings.validation.metadata_profile,metadata_required_fields:settings=>[...settings.validation.metadata_required_fields],lifecycle_stale_blocker_reason_patterns:settings=>[...settings.validation.lifecycle_stale_blocker_reason_patterns],lifecycle_closure_like_blocked_reason_patterns:settings=>[...settings.validation.lifecycle_closure_like_blocked_reason_patterns],lifecycle_closure_like_resolution_patterns:settings=>[...settings.validation.lifecycle_closure_like_resolution_patterns],lifecycle_closure_like_actual_result_patterns:settings=>[...settings.validation.lifecycle_closure_like_actual_result_patterns],governance_preset:settings=>settings.governance.preset,governance_ownership_enforcement:settings=>settings.governance.ownership_enforcement,governance_create_mode_default:settings=>settings.governance.create_mode_default,governance_close_validation_default:settings=>settings.governance.close_validation_default,governance_require_close_reason:settings=>settings.governance.require_close_reason?"enabled":"disabled",governance_create_default_type:settings=>settings.governance.create_default_type??"",governance_workflow_enforcement:settings=>settings.governance.workflow_enforcement??"off",governance_parent_reference_policy:settings=>settings.governance.parent_reference,governance_metadata_validation_profile:settings=>settings.governance.metadata_profile,governance_force_required_for_stale_lock:settings=>settings.governance.force_required_for_stale_lock?"enabled":"disabled",test_result_tracking:settings=>settings.testing.record_results_to_items?"enabled":"disabled",untrusted_linked_test_execution:settings=>settings.testing.allow_untrusted_linked_tests?"enabled":"disabled",telemetry_tracking:settings=>settings.telemetry.enabled?"enabled":"disabled",agent_identity_vocabulary:settings=>summarizeAgentIdentityVocabulary(settings.agent_identity?.identity_vocabulary),context:settings=>({default_depth:settings.context.default_depth,activity_limit:settings.context.activity_limit,stale_threshold_days:settings.context.stale_threshold_days,sections:{...settings.context.sections}})};function readConfigValue(settings,key){return CONFIG_VALUE_READERS[key](settings)}function withWarnings(result,warnings){if(warnings.length===0){return result}return{...result,warnings}}async function resolveSettingsTarget(scope,global2){const cwd=process.cwd();const pmRoot=scope==="project"?resolvePmRoot(cwd,global2.path):resolveGlobalPmRoot(cwd);const settingsPath=getSettingsPath(pmRoot);if(scope==="project"){await assertInitializedTracker(pmRoot)}return{pmRoot,settingsPath}}function parseSectionToggle(raw){if(raw===void 0)return void 0;const normalized=raw.trim().toLowerCase();if(normalized==="true"||normalized==="enabled"||normalized==="on"||normalized==="1")return true;if(normalized==="false"||normalized==="disabled"||normalized==="off"||normalized==="0")return false;throw new PmCliError(`Context section toggle must be true|false|enabled|disabled, got "${raw}"`,EXIT_CODE.USAGE)}function parsePositiveContextInteger(rawValue,option){const raw=rawValue.trim();const parsed=Number(raw);if(/^\d+$/u.test(raw)&&Number.isSafeInteger(parsed)&&parsed>0){return parsed}throw new PmCliError(`Context ${option} must be a positive integer`,EXIT_CODE.USAGE)}async function applyContextConfig(settings,options,target,scope,warnings){let changed=false;const ctx=settings.context;if(options.defaultDepth!==void 0){const normalized=options.defaultDepth.trim().toLowerCase();if(!CONTEXT_DEPTH_VALUES.includes(normalized)){throw new PmCliError(`Context --default-depth must be one of ${CONTEXT_DEPTH_VALUES.join("|")}`,EXIT_CODE.USAGE)}if(ctx.default_depth!==normalized){ctx.default_depth=normalized;changed=true}}if(options.activityLimit!==void 0){const parsed=parsePositiveContextInteger(options.activityLimit,"--activity-limit");if(ctx.activity_limit!==parsed){ctx.activity_limit=parsed;changed=true}}if(options.staleThresholdDays!==void 0){const parsed=parsePositiveContextInteger(options.staleThresholdDays,"--stale-threshold-days");if(ctx.stale_threshold_days!==parsed){ctx.stale_threshold_days=parsed;changed=true}}const sectionToggles=[["hierarchy",options.sectionHierarchy],["activity",options.sectionActivity],["progress",options.sectionProgress],["blockers",options.sectionBlockers],["files",options.sectionFiles],["workload",options.sectionWorkload],["staleness",options.sectionStaleness],["tests",options.sectionTests]];for(const[sectionName,rawValue]of sectionToggles){const toggle=parseSectionToggle(rawValue);if(toggle!==void 0){const key=sectionName;if(ctx.sections[key]!==toggle){ctx.sections[key]=toggle;changed=true}}}if(changed){await writeSettings(target.pmRoot,settings,"config:set:context")}return withWarnings({scope,key:"context",context_settings:{default_depth:ctx.default_depth,activity_limit:ctx.activity_limit,stale_threshold_days:ctx.stale_threshold_days,sections:{...ctx.sections}},settings_path:target.settingsPath,changed},warnings)}function applyNestedSettingPositionalValue(keyValue,valueValue,options){if(options.value!==void 0&&options.value!==valueValue){throw new PmCliError(`Config set ${keyValue} received both positional value "${valueValue}" and --value "${options.value}". Pass only one.`,EXIT_CODE.USAGE)}return{...options,value:valueValue}}function applyPositionalValue(action,keyValue,normalizedKey,nestedSetting,valueValue,options){if(valueValue===void 0){return options}if(action!=="set"){throw new PmCliError(`Config action "${action}" does not accept a positional value. Only "set" takes <value>.`,EXIT_CODE.USAGE)}if(typeof keyValue!=="string"||keyValue.trim().length===0){throw new PmCliError('Config action "set" requires <key> before a positional <value>.',EXIT_CODE.USAGE)}if(nestedSetting){return applyNestedSettingPositionalValue(keyValue,valueValue,options)}assertConfigKeyDefined(normalizedKey);const routed=resolveConfigPositionalValue(normalizedKey,valueValue);if(!routed.routable){throw new PmCliError(routed.reason,EXIT_CODE.USAGE)}if(routed.flag==="criterion"){if(options.criterion!==void 0&&options.criterion.length>0){throw new PmCliError(`Config set ${keyValue} received both positional value "${valueValue}" and --criterion. Pass criteria via --criterion only when supplying more than one value.`,EXIT_CODE.USAGE)}return{...options,criterion:routed.values}}if(routed.flag==="format"){return{...options,format:routed.value}}if(options.policy!==void 0&&normalizePolicyForConflict(normalizedKey,options.policy)!==normalizePolicyForConflict(normalizedKey,routed.value)){throw new PmCliError(`Config set ${keyValue} received both positional value "${valueValue}" and --policy "${options.policy}". Pass only one.`,EXIT_CODE.USAGE)}return{...options,policy:routed.value}}function buildConfigListResult(context){const keys=Object.keys(CONFIG_KEY_ALIASES).map(candidate=>({key:candidate,aliases:CONFIG_KEY_ALIASES[candidate],value_kind:candidate==="context"||candidate==="agent_identity_vocabulary"?"object":isCriteriaConfigKey(candidate)?"string_array":"enum",set_flags:candidate==="context"?["--default-depth","--activity-limit","--stale-threshold-days","--section-<name>"]:candidate==="agent_identity_vocabulary"?["--policy","--value","--criterion"]:isCriteriaConfigKey(candidate)?["--criterion","--clear-criteria"]:candidate==="item_format"?["--format"]:["--policy"],summary:CONFIG_KEY_SUMMARIES[candidate],value:readConfigValue(context.settings,candidate)}));const nestedSettings=NESTED_SETTING_DESCRIPTORS.map(descriptor=>({key:descriptor.key,canonical_key:descriptor.key.replaceAll("_","-"),path:descriptor.path,kind:descriptor.kind,value:readNestedSettingValue(context.settings,descriptor),summary:descriptor.summary,...descriptor.choices?{choices:[...descriptor.choices]}:{},...descriptor.min===void 0?{}:{min:descriptor.min},...descriptor.max===void 0?{}:{max:descriptor.max}}));return withWarnings({scope:context.scope,keys,nested_settings:nestedSettings,count:keys.length,settings_path:context.target.settingsPath,changed:false},context.warnings)}function buildConfigExportResult(context){const values=Object.fromEntries(Object.keys(CONFIG_KEY_ALIASES).map(key=>[key,readConfigValue(context.settings,key)]));return withWarnings({scope:context.scope,values,settings_path:context.target.settingsPath,changed:false},context.warnings)}function buildConfigGetResult(context,key){const value=readConfigValue(context.settings,key);const base={scope:context.scope,key,settings_path:context.target.settingsPath,changed:false};if(key==="item_format"){return withWarnings({...base,format:context.settings.item_format,has_explicit_item_format:context.metadata.has_explicit_item_format},context.warnings)}if(key==="context"){return withWarnings({...base,context_settings:value},context.warnings)}if(key==="agent_identity_vocabulary"){return withWarnings({...base,identity_vocabulary:value},context.warnings)}if(Array.isArray(value)){return withWarnings({...base,criteria:value},context.warnings)}return withWarnings({...base,policy:value},context.warnings)}async function buildNestedSettingResult(context,action,nestedSetting,options){if(action==="get"){const currentValue=readNestedSettingValue(context.settings,nestedSetting);return withWarnings({scope:context.scope,key:nestedSetting.key,nested_setting:{key:nestedSetting.key,path:nestedSetting.path,kind:nestedSetting.kind,value:currentValue},settings_path:context.target.settingsPath,changed:false},context.warnings)}const rawValue=options.value;if(typeof rawValue!=="string"){throw new PmCliError(`Config set ${nestedSetting.key} requires a value. Pass it positionally (\`pm config ${context.scope} set ${nestedSetting.key} <value>\`) or via --value.`,EXIT_CODE.USAGE)}const parsed=parseNestedSettingValue(nestedSetting,rawValue);if(!parsed.ok){throw new PmCliError(parsed.error.message,EXIT_CODE.USAGE)}const changed=writeNestedSettingValue(context.settings,nestedSetting,parsed.parsed.value);if(changed){await writeSettings(context.target.pmRoot,context.settings,`config:set:${nestedSetting.path}`)}return withWarnings({scope:context.scope,key:nestedSetting.key,nested_setting:{key:nestedSetting.key,path:nestedSetting.path,kind:nestedSetting.kind,value:parsed.parsed.value},settings_path:context.target.settingsPath,changed},context.warnings)}async function writeConfigSettingsIfChanged(context,changed,reason){if(changed){await writeSettings(context.target.pmRoot,context.settings,reason)}}function hasGovernanceValidationMirrorChange(governanceValue,validationValue,nextPolicy){return governanceValue!==nextPolicy||validationValue!==nextPolicy}function buildPolicyResult(context,key,policy,changed){return withWarnings({scope:context.scope,key,policy,settings_path:context.target.settingsPath,changed},context.warnings)}function buildCriteriaResult(context,key,criteria,changed){return withWarnings({scope:context.scope,key,criteria,settings_path:context.target.settingsPath,changed},context.warnings)}async function setItemFormatConfig(context,options){const nextFormat=normalizeItemFormat(options.format);const changed=context.settings.item_format!==nextFormat||!context.metadata.has_explicit_item_format;let migration=void 0;if(changed){const typeRegistry=resolveItemTypeRegistry(context.settings,getActiveExtensionRegistrations());const migrated=await migrateItemFilesToFormat(context.target.pmRoot,nextFormat,"config:set:item_format:migrate",typeRegistry.type_to_folder,context.settings.schema);migration={target_format:migrated.target_format,scanned:migrated.scanned,migrated:migrated.migrated,removed:migrated.removed,warnings:migrated.warnings};context.settings.item_format=nextFormat;await writeSettings(context.target.pmRoot,context.settings,"config:set:item_format")}return withWarnings({scope:context.scope,key:"item_format",format:context.settings.item_format,has_explicit_item_format:true,migration,settings_path:context.target.settingsPath,changed},context.warnings)}async function setValidationConfig(context,key,options){if(key==="history_missing_stream_policy"){const nextPolicy2=normalizeHistoryMissingStreamPolicy(options.policy);const changed2=context.settings.history.missing_stream!==nextPolicy2;context.settings.history.missing_stream=nextPolicy2;await writeConfigSettingsIfChanged(context,changed2,"config:set:history_missing_stream_policy");return buildPolicyResult(context,key,context.settings.history.missing_stream,changed2)}if(key==="sprint_release_format_policy"){const nextPolicy2=normalizeSprintReleaseFormatPolicy(options.policy);const changed2=context.settings.validation.sprint_release_format!==nextPolicy2;context.settings.validation.sprint_release_format=nextPolicy2;await writeConfigSettingsIfChanged(context,changed2,"config:set:sprint_release_format_policy");return buildPolicyResult(context,key,context.settings.validation.sprint_release_format,changed2)}if(key==="parent_reference_policy"){const nextPolicy2=normalizeParentReferencePolicy(options.policy);const changed2=context.settings.validation.parent_reference!==nextPolicy2||context.settings.governance.preset!=="custom"||context.settings.governance.parent_reference!==nextPolicy2;context.settings.validation.parent_reference=nextPolicy2;context.settings.governance.preset="custom";context.settings.governance.parent_reference=nextPolicy2;await writeConfigSettingsIfChanged(context,changed2,"config:set:parent_reference_policy");return buildPolicyResult(context,key,context.settings.validation.parent_reference,changed2)}const nextPolicy=normalizeValidateMetadataProfile(options.policy);const changed=context.settings.validation.metadata_profile!==nextPolicy||context.settings.governance.preset!=="custom"||context.settings.governance.metadata_profile!==nextPolicy;context.settings.validation.metadata_profile=nextPolicy;context.settings.governance.preset="custom";context.settings.governance.metadata_profile=nextPolicy;await writeConfigSettingsIfChanged(context,changed,"config:set:metadata_validation_profile");return buildPolicyResult(context,key,context.settings.validation.metadata_profile,changed)}async function setCriteriaConfig(context,key,options){if(key==="metadata_required_fields"){const nextCriteria2=normalizeMetadataRequiredFields(options.criterion,options.clearCriteria);const changed2=nextCriteria2.length!==context.settings.validation.metadata_required_fields.length||nextCriteria2.some((value,index)=>value!==context.settings.validation.metadata_required_fields[index]);context.settings.validation.metadata_required_fields=nextCriteria2;await writeConfigSettingsIfChanged(context,changed2,"config:set:metadata_required_fields");return buildCriteriaResult(context,key,[...context.settings.validation.metadata_required_fields],changed2)}const lifecycleTargets={lifecycle_stale_blocker_reason_patterns:context.settings.validation.lifecycle_stale_blocker_reason_patterns,lifecycle_closure_like_blocked_reason_patterns:context.settings.validation.lifecycle_closure_like_blocked_reason_patterns,lifecycle_closure_like_resolution_patterns:context.settings.validation.lifecycle_closure_like_resolution_patterns,lifecycle_closure_like_actual_result_patterns:context.settings.validation.lifecycle_closure_like_actual_result_patterns};const currentCriteria=lifecycleTargets[key];const nextCriteria=normalizeLifecyclePatternCriteria(key,options.criterion,options.clearCriteria);const changed=nextCriteria.length!==currentCriteria.length||nextCriteria.some((value,index)=>value!==currentCriteria[index]);currentCriteria.splice(0,currentCriteria.length,...nextCriteria);await writeConfigSettingsIfChanged(context,changed,`config:set:${key}`);return buildCriteriaResult(context,key,[...currentCriteria],changed)}async function setGovernancePresetOrTypeConfig(context,key,options){if(key==="governance_preset"){const nextPolicy=normalizeGovernancePreset(options.policy);const changed2=context.settings.governance.preset!==nextPolicy;context.settings.governance.preset=nextPolicy;await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_preset");return buildPolicyResult(context,key,context.settings.governance.preset,changed2)}const policyProvided=typeof options.policy==="string";const rawType=policyProvided?options.policy.trim():"";if(policyProvided&&rawType.length===0){const changed2=context.settings.governance.create_default_type!==void 0;delete context.settings.governance.create_default_type;await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_create_default_type");return buildPolicyResult(context,key,context.settings.governance.create_default_type??"",changed2)}if(rawType.length===0){throw new PmCliError('Config set governance-create-default-type requires an item type value (or an empty value "" to clear it)',EXIT_CODE.USAGE)}const typeRegistry=resolveItemTypeRegistry(context.settings,getActiveExtensionRegistrations());const resolvedType=resolveTypeName(rawType,typeRegistry);if(!resolvedType){throw new PmCliError(buildInvalidTypeError(rawType,typeRegistry.types,resolveItemTypesFilePath(context.target.pmRoot,context.settings.schema)),EXIT_CODE.USAGE)}const changed=context.settings.governance.create_default_type!==resolvedType;context.settings.governance.create_default_type=resolvedType;await writeConfigSettingsIfChanged(context,changed,"config:set:governance_create_default_type");return buildPolicyResult(context,key,context.settings.governance.create_default_type,changed)}async function setGovernancePolicyConfig(context,key,options){if(key==="governance_ownership_enforcement"){const nextPolicy2=normalizeGovernanceOwnershipEnforcement(options.policy);const changed2=context.settings.governance.preset!=="custom"||context.settings.governance.ownership_enforcement!==nextPolicy2;context.settings.governance.preset="custom";context.settings.governance.ownership_enforcement=nextPolicy2;await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_ownership_enforcement");return buildPolicyResult(context,key,context.settings.governance.ownership_enforcement,changed2)}if(key==="governance_create_mode_default"){const nextPolicy2=normalizeGovernanceCreateModeDefault(options.policy);const changed2=context.settings.governance.preset!=="custom"||context.settings.governance.create_mode_default!==nextPolicy2;context.settings.governance.preset="custom";context.settings.governance.create_mode_default=nextPolicy2;await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_create_mode_default");return buildPolicyResult(context,key,context.settings.governance.create_mode_default,changed2)}const nextPolicy=normalizeGovernanceCloseValidationDefault(options.policy);const changed=context.settings.governance.preset!=="custom"||context.settings.governance.close_validation_default!==nextPolicy;context.settings.governance.preset="custom";context.settings.governance.close_validation_default=nextPolicy;await writeConfigSettingsIfChanged(context,changed,"config:set:governance_close_validation_default");return buildPolicyResult(context,key,context.settings.governance.close_validation_default,changed)}async function setGovernanceValidationConfig(context,key,options){if(key==="governance_parent_reference_policy"){const nextPolicy2=normalizeParentReferencePolicy(options.policy);const changed2=context.settings.governance.preset!=="custom"||hasGovernanceValidationMirrorChange(context.settings.governance.parent_reference,context.settings.validation.parent_reference,nextPolicy2);context.settings.governance.preset="custom";context.settings.governance.parent_reference=nextPolicy2;context.settings.validation.parent_reference=nextPolicy2;await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_parent_reference_policy");return buildPolicyResult(context,key,context.settings.governance.parent_reference,changed2)}if(key==="governance_metadata_validation_profile"){const nextPolicy2=normalizeValidateMetadataProfile(options.policy);const changed2=context.settings.governance.preset!=="custom"||hasGovernanceValidationMirrorChange(context.settings.governance.metadata_profile,context.settings.validation.metadata_profile,nextPolicy2);context.settings.governance.preset="custom";context.settings.governance.metadata_profile=nextPolicy2;context.settings.validation.metadata_profile=nextPolicy2;await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_metadata_validation_profile");return buildPolicyResult(context,key,context.settings.governance.metadata_profile,changed2)}const nextPolicy=normalizeGovernanceWorkflowEnforcement(options.policy);const changed=(context.settings.governance.workflow_enforcement??"off")!==nextPolicy;context.settings.governance.workflow_enforcement=nextPolicy;await writeConfigSettingsIfChanged(context,changed,"config:set:governance_workflow_enforcement");return buildPolicyResult(context,key,context.settings.governance.workflow_enforcement,changed)}async function setGovernanceBooleanConfig(context,key,options){if(key==="governance_require_close_reason"){const nextPolicy2=normalizeGovernanceRequireCloseReasonPolicy(options.policy);const nextEnabled2=nextPolicy2==="enabled";const changed2=context.settings.governance.require_close_reason!==nextEnabled2;context.settings.governance.require_close_reason=nextEnabled2;await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_require_close_reason");return buildPolicyResult(context,key,context.settings.governance.require_close_reason?"enabled":"disabled",changed2)}const nextPolicy=normalizeGovernanceForceRequiredForStaleLockPolicy(options.policy);const nextEnabled=nextPolicy==="enabled";const changed=context.settings.governance.preset!=="custom"||context.settings.governance.force_required_for_stale_lock!==nextEnabled;context.settings.governance.preset="custom";context.settings.governance.force_required_for_stale_lock=nextEnabled;await writeConfigSettingsIfChanged(context,changed,"config:set:governance_force_required_for_stale_lock");return buildPolicyResult(context,key,context.settings.governance.force_required_for_stale_lock?"enabled":"disabled",changed)}async function setTrackingConfig(context,key,options){if(key==="test_result_tracking"){const nextPolicy2=normalizeTestResultTrackingPolicy(options.policy);const nextEnabled2=nextPolicy2==="enabled";const changed2=context.settings.testing.record_results_to_items!==nextEnabled2;context.settings.testing.record_results_to_items=nextEnabled2;await writeConfigSettingsIfChanged(context,changed2,"config:set:test_result_tracking");return buildPolicyResult(context,key,context.settings.testing.record_results_to_items?"enabled":"disabled",changed2)}if(key==="untrusted_linked_test_execution"){const nextPolicy2=normalizeEnabledDisabledPolicy(options.policy,"untrusted-linked-test-execution");const nextEnabled2=nextPolicy2==="enabled";const changed2=context.settings.testing.allow_untrusted_linked_tests!==nextEnabled2;context.settings.testing.allow_untrusted_linked_tests=nextEnabled2;await writeConfigSettingsIfChanged(context,changed2,"config:set:untrusted_linked_test_execution");return buildPolicyResult(context,key,context.settings.testing.allow_untrusted_linked_tests?"enabled":"disabled",changed2)}const nextPolicy=normalizeTelemetryTrackingPolicy(options.policy);const nextEnabled=nextPolicy==="enabled";const changed=context.settings.telemetry.enabled!==nextEnabled||!context.settings.telemetry.first_run_prompt_completed;context.settings.telemetry.enabled=nextEnabled;context.settings.telemetry.first_run_prompt_completed=true;await writeConfigSettingsIfChanged(context,changed,"config:set:telemetry_tracking");return buildPolicyResult(context,key,context.settings.telemetry.enabled?"enabled":"disabled",changed)}async function setDefinitionOfDoneConfig(context,key,options){const nextCriteria=normalizeCriteria(options.criterion,options.clearCriteria);const changed=nextCriteria.length!==context.settings.workflow.definition_of_done.length||nextCriteria.some((value,index)=>value!==context.settings.workflow.definition_of_done[index]);context.settings.workflow.definition_of_done=nextCriteria;await writeConfigSettingsIfChanged(context,changed,"config:set:definition_of_done");return buildCriteriaResult(context,key,[...context.settings.workflow.definition_of_done],changed)}function parseAgentIdentityVocabularyOperation(raw){const policy=raw?.trim().toLowerCase().replaceAll("_","-");const dryRun=policy?.startsWith("preview-")===true;const operation=dryRun?policy.slice("preview-".length):policy;if(operation==="add"||operation==="remove"||operation==="clear"){return{operation,dryRun}}throw new PmCliError("Config set agent-identity-vocabulary requires --policy add|remove|clear|preview-add|preview-remove|preview-clear",EXIT_CODE.USAGE)}function parseAgentIdentityVocabularyMutationValue(operation,value){if(operation==="add"){const separator=value?.lastIndexOf("=")??-1;if(separator<=0||separator===value.length-1){throw new PmCliError('Config set agent-identity-vocabulary --policy add requires --value "<legacy-author>=<canonical-harness>"',EXIT_CODE.USAGE)}return{legacy_author:value.slice(0,separator),canonical_harness:value.slice(separator+1)}}if(operation==="remove"){if(value===void 0){throw new PmCliError("Config set agent-identity-vocabulary --policy remove requires --value <legacy-author>",EXIT_CODE.USAGE)}return{legacy_author:value}}if(value!==void 0){throw new PmCliError("Config set agent-identity-vocabulary --policy clear does not accept --value",EXIT_CODE.USAGE)}return{}}async function setAgentIdentityVocabularyConfig(context,options){const{operation,dryRun}=parseAgentIdentityVocabularyOperation(options.policy);const mutationValue=parseAgentIdentityVocabularyMutationValue(operation,options.value);let planned;try{planned=planAgentIdentityVocabularyMutation(context.settings.agent_identity?.identity_vocabulary,{operation,...mutationValue,observed_authors:options.criterion})}catch(error){throw new PmCliError(error.message,EXIT_CODE.USAGE)}if(planned.preview.changed&&!dryRun){context.settings.agent_identity={...context.settings.agent_identity,identity_vocabulary:planned.vocabulary};await writeConfigSettingsIfChanged(context,true,`config:set:agent_identity.identity_vocabulary:${operation}:v${planned.preview.version_after}`)}return withWarnings({scope:context.scope,key:"agent_identity_vocabulary",identity_vocabulary:summarizeAgentIdentityVocabulary(dryRun?context.settings.agent_identity?.identity_vocabulary:planned.vocabulary),vocabulary_mutation:planned.preview,settings_path:context.target.settingsPath,changed:planned.preview.changed&&!dryRun},context.warnings)}async function setConfigValue(context,key,options){if(options.clearCriteria===true&&!isCriteriaConfigKey(key)){throw new PmCliError("--clear-criteria is only supported with config set criteria-list keys",EXIT_CODE.USAGE)}if(key==="item_format"){return setItemFormatConfig(context,options)}if(key==="context"){return applyContextConfig(context.settings,options,context.target,context.scope,context.warnings)}if(key==="agent_identity_vocabulary"){return setAgentIdentityVocabularyConfig(context,options)}if(key==="definition_of_done"){return setDefinitionOfDoneConfig(context,key,options)}if(isCriteriaValueConfigKey(key)){return setCriteriaConfig(context,key,options)}if(TRACKING_CONFIG_KEYS.has(key)){return setTrackingConfig(context,key,options)}if(GOVERNANCE_BOOLEAN_CONFIG_KEYS.has(key)){return setGovernanceBooleanConfig(context,key,options)}if(isGovernancePolicyConfigKey(key)){return setGovernancePolicyConfig(context,key,options)}if(isGovernanceValidationConfigKey(key)){return setGovernanceValidationConfig(context,key,options)}if(isGovernancePresetOrTypeConfigKey(key)){return setGovernancePresetOrTypeConfig(context,key,options)}return setValidationConfig(context,key,options)}async function runConfig(scopeValue,actionValue,keyValue,options,global2,valueValue){const scope=normalizeScope(scopeValue);const action=normalizeAction(actionValue);const nestedSetting=action==="get"||action==="set"?resolveNestedSettingDescriptor(keyValue):void 0;const key=nestedSetting?void 0:normalizeKeyForAction(action,keyValue);const routedOptions=applyPositionalValue(action,keyValue,key,nestedSetting,valueValue,options);const target=await resolveSettingsTarget(scope,global2);const{settings,metadata,warnings:settingsReadWarnings}=await readSettingsWithMetadata(target.pmRoot);const context={scope,target,settings,metadata,warnings:normalizeWarnings(settingsReadWarnings)};if(nestedSetting){return buildNestedSettingResult(context,action,nestedSetting,routedOptions)}if(action==="list"){return buildConfigListResult(context)}if(action==="export"){return buildConfigExportResult(context)}assertConfigKeyDefined(key);return action==="get"?buildConfigGetResult(context,key):setConfigValue(context,key,routedOptions)}const _testOnlyConfigCommand={hasGovernanceValidationMirrorChange,applyPositionalValue,normalizeAction,normalizeCriteria,normalizeGovernanceCloseValidationDefault,normalizeGovernanceCreateModeDefault,normalizeGovernanceForceRequiredForStaleLockPolicy,normalizeGovernanceOwnershipEnforcement,normalizeGovernancePreset,normalizeGovernanceRequireCloseReasonPolicy,normalizeGovernanceWorkflowEnforcement,normalizeHistoryMissingStreamPolicy,normalizeItemFormat,normalizeKey,normalizeMetadataRequiredFields,normalizePolicyForConflict,normalizeScope,normalizeTelemetryTrackingPolicy,normalizeTestResultTrackingPolicy,normalizeValidateMetadataProfile,normalizeWarnings};export{_testOnlyConfigCommand,runConfig};
|
|
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]="d9b6f2ba-2c5e-52ea-891d-53124601fb89")}catch{}})();import{resolveConfigPositionalValue}from"../core/config/positional-value.js";import{NESTED_SETTING_DESCRIPTORS,parseNestedSettingValue,readNestedSettingValue,resolveNestedSettingDescriptor,writeNestedSettingValue}from"../core/config/nested-settings.js";import{getActiveExtensionRegistrations}from"../core/extensions/index.js";import{normalizeParentReferencePolicy}from"../core/item/parent-reference-policy.js";import{normalizeSprintReleaseFormatPolicy}from"../core/item/sprint-release-format.js";import{resolveItemTypeRegistry,resolveTypeName}from"../core/item/type-registry.js";import{buildInvalidTypeError}from"../core/schema/item-types-file.js";import{resolveItemTypesFilePath}from"../core/schema/runtime-schema.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{createUnknownSubcommandError}from"./agent/subcommand-recovery.js";import{planAgentIdentityVocabularyMutation,summarizeAgentIdentityVocabulary}from"./agent/identity-config.js";import{assertInitializedTracker}from"./environment/tracker-preflight.js";import{migrateItemFilesToFormat}from"../core/store/item-format-migration.js";import{getSettingsPath,resolveGlobalPmRoot,resolvePmRoot}from"../core/store/paths.js";import{readSettingsWithMetadata,writeSettings}from"../core/store/settings.js";import{CONTEXT_DEPTH_VALUES}from"../types/index.js";const CONFIG_SCOPE_VALUES=["project","global"],CONFIG_KEY_ALIASES={definition_of_done:["definition-of-done","definition_of_done"],item_format:["item-format","item_format"],history_missing_stream_policy:["history-missing-stream-policy","history_missing_stream_policy"],sprint_release_format_policy:["sprint-release-format-policy","sprint_release_format_policy"],parent_reference_policy:["parent-reference-policy","parent_reference_policy"],metadata_validation_profile:["metadata-validation-profile","metadata_validation_profile"],metadata_required_fields:["metadata-required-fields","metadata_required_fields"],lifecycle_stale_blocker_reason_patterns:["lifecycle-stale-blocker-reason-patterns","lifecycle_stale_blocker_reason_patterns"],lifecycle_closure_like_blocked_reason_patterns:["lifecycle-closure-like-blocked-reason-patterns","lifecycle_closure_like_blocked_reason_patterns"],lifecycle_closure_like_resolution_patterns:["lifecycle-closure-like-resolution-patterns","lifecycle_closure_like_resolution_patterns"],lifecycle_closure_like_actual_result_patterns:["lifecycle-closure-like-actual-result-patterns","lifecycle_closure_like_actual_result_patterns"],governance_preset:["governance-preset","governance_preset"],governance_ownership_enforcement:["governance-ownership-enforcement","governance_ownership_enforcement"],governance_create_mode_default:["governance-create-mode-default","governance_create_mode_default"],governance_close_validation_default:["governance-close-validation-default","governance_close_validation_default"],governance_require_close_reason:["governance-require-close-reason","governance_require_close_reason"],governance_create_default_type:["governance-create-default-type","governance_create_default_type"],governance_workflow_enforcement:["governance-workflow-enforcement","governance_workflow_enforcement"],governance_parent_reference_policy:["governance-parent-reference-policy","governance_parent_reference_policy"],governance_metadata_validation_profile:["governance-metadata-validation-profile","governance_metadata_validation_profile"],governance_force_required_for_stale_lock:["governance-force-required-for-stale-lock","governance_force_required_for_stale_lock"],test_result_tracking:["test-result-tracking","test_result_tracking"],untrusted_linked_test_execution:["untrusted-linked-test-execution","untrusted_linked_test_execution"],telemetry_tracking:["telemetry-tracking","telemetry_tracking"],agent_identity_vocabulary:["agent-identity-vocabulary","agent_identity_vocabulary"],context:["context"]},CANONICAL_CONFIG_KEYS=Object.keys(CONFIG_KEY_ALIASES).map(candidate=>CONFIG_KEY_ALIASES[candidate][0]),CONFIG_KEY_BY_ALIAS=Object.fromEntries(Object.keys(CONFIG_KEY_ALIASES).flatMap(key=>CONFIG_KEY_ALIASES[key].map(alias=>[alias,key]))),CONFIG_KEY_SUMMARIES={definition_of_done:"Definition of Done criteria list.",item_format:"Default item file format.",history_missing_stream_policy:"Missing history stream handling policy.",sprint_release_format_policy:"Sprint/release format validation policy.",parent_reference_policy:"Parent reference validation policy.",metadata_validation_profile:"Validate metadata profile policy (core|strict|custom).",metadata_required_fields:"Validate custom metadata required-fields list.",lifecycle_stale_blocker_reason_patterns:"Validate lifecycle stale-blocker reason substring patterns (criteria list).",lifecycle_closure_like_blocked_reason_patterns:"Validate lifecycle closure-like blocked_reason substring patterns (criteria list).",lifecycle_closure_like_resolution_patterns:"Validate lifecycle closure-like resolution substring patterns (criteria list).",lifecycle_closure_like_actual_result_patterns:"Validate lifecycle closure-like actual_result substring patterns (criteria list).",governance_preset:"Governance preset policy (minimal|default|strict|custom).",governance_ownership_enforcement:"Governance ownership enforcement policy (none|warn|strict).",governance_create_mode_default:"Governance default create mode (progressive|strict).",governance_close_validation_default:"Governance default close validation mode (off|warn|strict).",governance_require_close_reason:"Governance close-reason requirement policy (enabled|disabled).",governance_create_default_type:"Governance default item type for `pm create` when --type is omitted.",governance_workflow_enforcement:"Governance per-type transition enforcement mode (off|warn|strict).",governance_parent_reference_policy:"Governance parent reference policy (warn|strict_error).",governance_metadata_validation_profile:"Governance metadata validation profile (core|strict|custom).",governance_force_required_for_stale_lock:"Governance stale-lock force policy (enabled|disabled).",test_result_tracking:"Item-level linked test result persistence policy.",untrusted_linked_test_execution:"Permit an explicit per-run override for commands not trusted by this clone.",telemetry_tracking:"Telemetry usage reporting policy.",agent_identity_vocabulary:"Versioned exact legacy-author interpretation vocabulary (summary only).",context:"Context command settings (depth, section toggles, limits)."},LIFECYCLE_PATTERN_CONFIG_KEYS=["lifecycle_stale_blocker_reason_patterns","lifecycle_closure_like_blocked_reason_patterns","lifecycle_closure_like_resolution_patterns","lifecycle_closure_like_actual_result_patterns"],CRITERIA_CONFIG_KEYS=new Set(["metadata_required_fields",...LIFECYCLE_PATTERN_CONFIG_KEYS]),TRACKING_CONFIG_KEYS=new Set(["test_result_tracking","untrusted_linked_test_execution","telemetry_tracking"]),GOVERNANCE_BOOLEAN_CONFIG_KEYS=new Set(["governance_require_close_reason","governance_force_required_for_stale_lock"]),GOVERNANCE_POLICY_CONFIG_KEYS=new Set(["governance_ownership_enforcement","governance_create_mode_default","governance_close_validation_default"]),GOVERNANCE_VALIDATION_CONFIG_KEYS=new Set(["governance_parent_reference_policy","governance_metadata_validation_profile","governance_workflow_enforcement"]),GOVERNANCE_PRESET_OR_TYPE_CONFIG_KEYS=new Set(["governance_preset","governance_create_default_type"]),isCriteriaValueConfigKey=key=>CRITERIA_CONFIG_KEYS.has(key),isGovernancePolicyConfigKey=key=>GOVERNANCE_POLICY_CONFIG_KEYS.has(key),isGovernanceValidationConfigKey=key=>GOVERNANCE_VALIDATION_CONFIG_KEYS.has(key),isGovernancePresetOrTypeConfigKey=key=>GOVERNANCE_PRESET_OR_TYPE_CONFIG_KEYS.has(key);function isCriteriaConfigKey(key){return key==="definition_of_done"||isCriteriaValueConfigKey(key)}function normalizeScope(value){if(CONFIG_SCOPE_VALUES.includes(value))return value;throw new PmCliError(`Invalid config scope "${value}". Allowed: ${CONFIG_SCOPE_VALUES.join(", ")}`,EXIT_CODE.USAGE)}function normalizeAction(value){if(value==="get"||value==="set"||value==="list"||value==="export")return value;throw createUnknownSubcommandError({command_path:"config",token:value.trim()||"<empty>",allowed:["export","get","list","set"],token_kind:"action"})}function normalizeKey(value){const key=CONFIG_KEY_BY_ALIAS[value];if(key)return key;const nestedKeys=NESTED_SETTING_DESCRIPTORS.map(descriptor=>descriptor.key).join(", ");throw new PmCliError(`Invalid config key "${value}". Supported: ${CANONICAL_CONFIG_KEYS.join(", ")} (underscore variants also accepted). Nested leaf settings: ${nestedKeys}.`,EXIT_CODE.USAGE)}function normalizeCriteria(values,clearCriteria){const normalized=[...new Set((values??[]).map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right));if(clearCriteria){if(normalized.length>0)throw new PmCliError("Config set definition-of-done cannot combine --clear-criteria with --criterion values",EXIT_CODE.USAGE);return[]}if(normalized.length===0)throw new PmCliError("Config set definition-of-done requires at least one non-empty --criterion value (or --clear-criteria to clear)",EXIT_CODE.USAGE);return normalized}function normalizeItemFormat(value){const normalized=value?.trim().toLowerCase();if(normalized==="toon")return"toon";throw normalized==="json_markdown"?new PmCliError("Config set item-format no longer accepts json_markdown. Markdown item files are legacy read/migration input only.",EXIT_CODE.USAGE):new PmCliError("Config set item-format requires --format toon",EXIT_CODE.USAGE)}function normalizeHistoryMissingStreamPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="auto_create"||normalized==="strict_error")return normalized;throw new PmCliError("Config set history-missing-stream-policy requires --policy with one of: auto_create, strict_error",EXIT_CODE.USAGE)}function normalizeTestResultTrackingPolicy(value){return normalizeEnabledDisabledPolicy(value,"test-result-tracking")}function normalizeEnabledDisabledPolicy(value,key){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="enabled"||normalized==="disabled")return normalized;throw new PmCliError(`Config set ${key} requires --policy with one of: enabled, disabled`,EXIT_CODE.USAGE)}function normalizeTelemetryTrackingPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="enabled"||normalized==="disabled")return normalized;throw new PmCliError("Config set telemetry-tracking requires --policy with one of: enabled, disabled",EXIT_CODE.USAGE)}function normalizeValidateMetadataProfile(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="core"||normalized==="strict"||normalized==="custom")return normalized;throw new PmCliError("Config set metadata-validation-profile requires --policy with one of: core, strict, custom",EXIT_CODE.USAGE)}function normalizeGovernancePreset(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="minimal"||normalized==="default"||normalized==="strict"||normalized==="custom")return normalized;throw new PmCliError("Config set governance-preset requires --policy with one of: minimal, default, strict, custom",EXIT_CODE.USAGE)}function normalizeGovernanceOwnershipEnforcement(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="none"||normalized==="warn"||normalized==="strict")return normalized;throw new PmCliError("Config set governance-ownership-enforcement requires --policy with one of: none, warn, strict",EXIT_CODE.USAGE)}function normalizeGovernanceCreateModeDefault(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="progressive"||normalized==="strict")return normalized;throw new PmCliError("Config set governance-create-mode-default requires --policy with one of: progressive, strict",EXIT_CODE.USAGE)}function normalizeGovernanceCloseValidationDefault(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="off"||normalized==="warn"||normalized==="strict")return normalized;if(normalized==="none"||normalized==="disabled")return"off";throw new PmCliError("Config set governance-close-validation-default requires --policy with one of: off, warn, strict",EXIT_CODE.USAGE)}function normalizeGovernanceWorkflowEnforcement(value){const normalized=typeof value=="string"?value.trim().toLowerCase().replaceAll("-","_"):void 0;if(normalized==="off"||normalized==="warn"||normalized==="strict")return normalized;if(normalized==="none"||normalized==="disabled")return"off";throw new PmCliError("Config set governance-workflow-enforcement requires one of: off, warn, strict",EXIT_CODE.USAGE)}function normalizeGovernanceForceRequiredForStaleLockPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="enabled"||normalized==="disabled")return normalized;throw new PmCliError("Config set governance-force-required-for-stale-lock requires --policy with one of: enabled, disabled",EXIT_CODE.USAGE)}function normalizeGovernanceRequireCloseReasonPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="enabled"||normalized==="disabled")return normalized;throw new PmCliError("Config set governance-require-close-reason requires --policy with one of: enabled, disabled",EXIT_CODE.USAGE)}const ENABLED_DISABLED_CONFLICT_POLICY_KEYS={test_result_tracking:"test-result-tracking",untrusted_linked_test_execution:"untrusted-linked-test-execution"};function normalizePolicyForConflict(key,value){const enabledDisabledKey=ENABLED_DISABLED_CONFLICT_POLICY_KEYS[key];if(enabledDisabledKey)return normalizeEnabledDisabledPolicy(value,enabledDisabledKey);switch(key){case"history_missing_stream_policy":return normalizeHistoryMissingStreamPolicy(value);case"sprint_release_format_policy":return normalizeSprintReleaseFormatPolicy(value);case"parent_reference_policy":case"governance_parent_reference_policy":return normalizeParentReferencePolicy(value);case"metadata_validation_profile":case"governance_metadata_validation_profile":return normalizeValidateMetadataProfile(value);case"governance_preset":return normalizeGovernancePreset(value);case"governance_ownership_enforcement":return normalizeGovernanceOwnershipEnforcement(value);case"governance_create_mode_default":return normalizeGovernanceCreateModeDefault(value);case"governance_close_validation_default":return normalizeGovernanceCloseValidationDefault(value);case"governance_require_close_reason":return normalizeGovernanceRequireCloseReasonPolicy(value);case"governance_workflow_enforcement":return normalizeGovernanceWorkflowEnforcement(value);case"governance_force_required_for_stale_lock":return normalizeGovernanceForceRequiredForStaleLockPolicy(value);case"telemetry_tracking":return normalizeTelemetryTrackingPolicy(value);default:return value.trim().toLowerCase().replaceAll("-","_")}}const METADATA_REQUIRED_FIELD_ALIAS_MAP={author:"author",acceptance_criteria:"acceptance_criteria","acceptance-criteria":"acceptance_criteria",estimated_minutes:"estimated_minutes","estimated-minutes":"estimated_minutes",estimate:"estimated_minutes",close_reason:"close_reason","close-reason":"close_reason",reviewer:"reviewer",risk:"risk",confidence:"confidence",sprint:"sprint",release:"release"},METADATA_REQUIRED_FIELD_OPTIONS=["author","acceptance_criteria","estimated_minutes","close_reason","reviewer","risk","confidence","sprint","release"];function normalizeMetadataRequiredFields(values,clearCriteria){const normalized=[...new Set((values??[]).map(value=>value.trim()).filter(value=>value.length>0))];if(clearCriteria){if(normalized.length>0)throw new PmCliError("Config set metadata-required-fields cannot combine --clear-criteria with --criterion values",EXIT_CODE.USAGE);return[]}if(normalized.length===0)throw new PmCliError("Config set metadata-required-fields requires at least one --criterion value (or --clear-criteria to clear)",EXIT_CODE.USAGE);const lowered=normalized.map(value=>value.toLowerCase().replaceAll("-","_")),unsupported=lowered.filter(value=>METADATA_REQUIRED_FIELD_ALIAS_MAP[value]===void 0);if(unsupported.length>0)throw new PmCliError(`Config set metadata-required-fields received unsupported values: ${unsupported.join(", ")}. Supported values: ${METADATA_REQUIRED_FIELD_OPTIONS.join(", ")}`,EXIT_CODE.USAGE);return[...new Set(lowered.map(value=>METADATA_REQUIRED_FIELD_ALIAS_MAP[value]))].sort((left,right)=>left.localeCompare(right))}function normalizeLifecyclePatternCriteria(key,values,clearCriteria){const normalized=[...new Set((values??[]).map(value=>value.trim().toLowerCase()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right));if(clearCriteria){if(normalized.length>0)throw new PmCliError(`Config set ${CONFIG_KEY_ALIASES[key][0]} cannot combine --clear-criteria with --criterion values`,EXIT_CODE.USAGE);return[]}if(normalized.length===0)throw new PmCliError(`Config set ${CONFIG_KEY_ALIASES[key][0]} requires at least one --criterion value (or --clear-criteria to clear)`,EXIT_CODE.USAGE);return normalized}function normalizeWarnings(values){return[...new Set(values)].sort((left,right)=>left.localeCompare(right))}function normalizeKeyForAction(action,value){if(action==="list"||action==="export"){if(typeof value=="string"&&value.trim().length>0)throw new PmCliError(`Config action "${action}" does not accept <key>`,EXIT_CODE.USAGE);return}if(typeof value!="string"||value.trim().length===0)throw new PmCliError(`Config action "${action}" requires <key>`,EXIT_CODE.USAGE);return normalizeKey(value)}function assertConfigKeyDefined(key){if(!key)throw new PmCliError("Config action requires <key>",EXIT_CODE.USAGE)}const CONFIG_VALUE_READERS={definition_of_done:settings=>[...settings.workflow.definition_of_done],item_format:settings=>settings.item_format,history_missing_stream_policy:settings=>settings.history.missing_stream,sprint_release_format_policy:settings=>settings.validation.sprint_release_format,parent_reference_policy:settings=>settings.validation.parent_reference,metadata_validation_profile:settings=>settings.validation.metadata_profile,metadata_required_fields:settings=>[...settings.validation.metadata_required_fields],lifecycle_stale_blocker_reason_patterns:settings=>[...settings.validation.lifecycle_stale_blocker_reason_patterns],lifecycle_closure_like_blocked_reason_patterns:settings=>[...settings.validation.lifecycle_closure_like_blocked_reason_patterns],lifecycle_closure_like_resolution_patterns:settings=>[...settings.validation.lifecycle_closure_like_resolution_patterns],lifecycle_closure_like_actual_result_patterns:settings=>[...settings.validation.lifecycle_closure_like_actual_result_patterns],governance_preset:settings=>settings.governance.preset,governance_ownership_enforcement:settings=>settings.governance.ownership_enforcement,governance_create_mode_default:settings=>settings.governance.create_mode_default,governance_close_validation_default:settings=>settings.governance.close_validation_default,governance_require_close_reason:settings=>settings.governance.require_close_reason?"enabled":"disabled",governance_create_default_type:settings=>settings.governance.create_default_type??"",governance_workflow_enforcement:settings=>settings.governance.workflow_enforcement??"off",governance_parent_reference_policy:settings=>settings.governance.parent_reference,governance_metadata_validation_profile:settings=>settings.governance.metadata_profile,governance_force_required_for_stale_lock:settings=>settings.governance.force_required_for_stale_lock?"enabled":"disabled",test_result_tracking:settings=>settings.testing.record_results_to_items?"enabled":"disabled",untrusted_linked_test_execution:settings=>settings.testing.allow_untrusted_linked_tests?"enabled":"disabled",telemetry_tracking:settings=>settings.telemetry.enabled?"enabled":"disabled",agent_identity_vocabulary:settings=>summarizeAgentIdentityVocabulary(settings.agent_identity?.identity_vocabulary),context:settings=>({default_depth:settings.context.default_depth,activity_limit:settings.context.activity_limit,stale_threshold_days:settings.context.stale_threshold_days,sections:{...settings.context.sections}})};function readConfigValue(settings,key){return CONFIG_VALUE_READERS[key](settings)}function withWarnings(result,warnings){return warnings.length===0?result:{...result,warnings}}async function resolveSettingsTarget(scope,global2){const cwd=process.cwd(),pmRoot=scope==="project"?resolvePmRoot(cwd,global2.path):resolveGlobalPmRoot(cwd),settingsPath=getSettingsPath(pmRoot);return scope==="project"&&await assertInitializedTracker(pmRoot),{pmRoot,settingsPath}}function parseSectionToggle(raw){if(raw===void 0)return;const normalized=raw.trim().toLowerCase();if(normalized==="true"||normalized==="enabled"||normalized==="on"||normalized==="1")return!0;if(normalized==="false"||normalized==="disabled"||normalized==="off"||normalized==="0")return!1;throw new PmCliError(`Context section toggle must be true|false|enabled|disabled, got "${raw}"`,EXIT_CODE.USAGE)}function parsePositiveContextInteger(rawValue,option){const raw=rawValue.trim(),parsed=Number(raw);if(/^\d+$/u.test(raw)&&Number.isSafeInteger(parsed)&&parsed>0)return parsed;throw new PmCliError(`Context ${option} must be a positive integer`,EXIT_CODE.USAGE)}async function applyContextConfig(settings,options,target,scope,warnings){let changed=!1;const ctx=settings.context;if(options.defaultDepth!==void 0){const normalized=options.defaultDepth.trim().toLowerCase();if(!CONTEXT_DEPTH_VALUES.includes(normalized))throw new PmCliError(`Context --default-depth must be one of ${CONTEXT_DEPTH_VALUES.join("|")}`,EXIT_CODE.USAGE);ctx.default_depth!==normalized&&(ctx.default_depth=normalized,changed=!0)}if(options.activityLimit!==void 0){const parsed=parsePositiveContextInteger(options.activityLimit,"--activity-limit");ctx.activity_limit!==parsed&&(ctx.activity_limit=parsed,changed=!0)}if(options.staleThresholdDays!==void 0){const parsed=parsePositiveContextInteger(options.staleThresholdDays,"--stale-threshold-days");ctx.stale_threshold_days!==parsed&&(ctx.stale_threshold_days=parsed,changed=!0)}const sectionToggles=[["hierarchy",options.sectionHierarchy],["activity",options.sectionActivity],["progress",options.sectionProgress],["blockers",options.sectionBlockers],["files",options.sectionFiles],["workload",options.sectionWorkload],["staleness",options.sectionStaleness],["tests",options.sectionTests]];for(const[sectionName,rawValue]of sectionToggles){const toggle=parseSectionToggle(rawValue);if(toggle!==void 0){const key=sectionName;ctx.sections[key]!==toggle&&(ctx.sections[key]=toggle,changed=!0)}}return changed&&await writeSettings(target.pmRoot,settings,"config:set:context"),withWarnings({scope,key:"context",context_settings:{default_depth:ctx.default_depth,activity_limit:ctx.activity_limit,stale_threshold_days:ctx.stale_threshold_days,sections:{...ctx.sections}},settings_path:target.settingsPath,changed},warnings)}function applyNestedSettingPositionalValue(keyValue,valueValue,options){if(options.value!==void 0&&options.value!==valueValue)throw new PmCliError(`Config set ${keyValue} received both positional value "${valueValue}" and --value "${options.value}". Pass only one.`,EXIT_CODE.USAGE);return{...options,value:valueValue}}function applyPositionalValue(action,keyValue,normalizedKey,nestedSetting,valueValue,options){if(valueValue===void 0)return options;if(action!=="set")throw new PmCliError(`Config action "${action}" does not accept a positional value. Only "set" takes <value>.`,EXIT_CODE.USAGE);if(typeof keyValue!="string"||keyValue.trim().length===0)throw new PmCliError('Config action "set" requires <key> before a positional <value>.',EXIT_CODE.USAGE);if(nestedSetting)return applyNestedSettingPositionalValue(keyValue,valueValue,options);assertConfigKeyDefined(normalizedKey);const routed=resolveConfigPositionalValue(normalizedKey,valueValue);if(!routed.routable)throw new PmCliError(routed.reason,EXIT_CODE.USAGE);if(routed.flag==="criterion"){if(options.criterion!==void 0&&options.criterion.length>0)throw new PmCliError(`Config set ${keyValue} received both positional value "${valueValue}" and --criterion. Pass criteria via --criterion only when supplying more than one value.`,EXIT_CODE.USAGE);return{...options,criterion:routed.values}}if(routed.flag==="format")return{...options,format:routed.value};if(options.policy!==void 0&&normalizePolicyForConflict(normalizedKey,options.policy)!==normalizePolicyForConflict(normalizedKey,routed.value))throw new PmCliError(`Config set ${keyValue} received both positional value "${valueValue}" and --policy "${options.policy}". Pass only one.`,EXIT_CODE.USAGE);return{...options,policy:routed.value}}function buildConfigListResult(context){const keys=Object.keys(CONFIG_KEY_ALIASES).map(candidate=>({key:candidate,aliases:CONFIG_KEY_ALIASES[candidate],value_kind:candidate==="context"||candidate==="agent_identity_vocabulary"?"object":isCriteriaConfigKey(candidate)?"string_array":"enum",set_flags:candidate==="context"?["--default-depth","--activity-limit","--stale-threshold-days","--section-<name>"]:candidate==="agent_identity_vocabulary"?["--policy","--value","--criterion"]:isCriteriaConfigKey(candidate)?["--criterion","--clear-criteria"]:candidate==="item_format"?["--format"]:["--policy"],summary:CONFIG_KEY_SUMMARIES[candidate],value:readConfigValue(context.settings,candidate)})),nestedSettings=NESTED_SETTING_DESCRIPTORS.map(descriptor=>({key:descriptor.key,canonical_key:descriptor.key.replaceAll("_","-"),path:descriptor.path,kind:descriptor.kind,value:readNestedSettingValue(context.settings,descriptor),summary:descriptor.summary,...descriptor.choices?{choices:[...descriptor.choices]}:{},...descriptor.min===void 0?{}:{min:descriptor.min},...descriptor.max===void 0?{}:{max:descriptor.max}}));return withWarnings({scope:context.scope,keys,nested_settings:nestedSettings,count:keys.length,settings_path:context.target.settingsPath,changed:!1},context.warnings)}function buildConfigExportResult(context){const values=Object.fromEntries(Object.keys(CONFIG_KEY_ALIASES).map(key=>[key,readConfigValue(context.settings,key)]));return withWarnings({scope:context.scope,values,settings_path:context.target.settingsPath,changed:!1},context.warnings)}function buildConfigGetResult(context,key){const value=readConfigValue(context.settings,key),base={scope:context.scope,key,settings_path:context.target.settingsPath,changed:!1};return key==="item_format"?withWarnings({...base,format:context.settings.item_format,has_explicit_item_format:context.metadata.has_explicit_item_format},context.warnings):key==="context"?withWarnings({...base,context_settings:value},context.warnings):key==="agent_identity_vocabulary"?withWarnings({...base,identity_vocabulary:value},context.warnings):Array.isArray(value)?withWarnings({...base,criteria:value},context.warnings):withWarnings({...base,policy:value},context.warnings)}async function buildNestedSettingResult(context,action,nestedSetting,options){if(action==="get"){const currentValue=readNestedSettingValue(context.settings,nestedSetting);return withWarnings({scope:context.scope,key:nestedSetting.key,nested_setting:{key:nestedSetting.key,path:nestedSetting.path,kind:nestedSetting.kind,value:currentValue},settings_path:context.target.settingsPath,changed:!1},context.warnings)}const rawValue=options.value;if(typeof rawValue!="string")throw new PmCliError(`Config set ${nestedSetting.key} requires a value. Pass it positionally (\`pm config ${context.scope} set ${nestedSetting.key} <value>\`) or via --value.`,EXIT_CODE.USAGE);const parsed=parseNestedSettingValue(nestedSetting,rawValue);if(!parsed.ok)throw new PmCliError(parsed.error.message,EXIT_CODE.USAGE);const changed=writeNestedSettingValue(context.settings,nestedSetting,parsed.parsed.value);return changed&&await writeSettings(context.target.pmRoot,context.settings,`config:set:${nestedSetting.path}`),withWarnings({scope:context.scope,key:nestedSetting.key,nested_setting:{key:nestedSetting.key,path:nestedSetting.path,kind:nestedSetting.kind,value:parsed.parsed.value},settings_path:context.target.settingsPath,changed},context.warnings)}async function writeConfigSettingsIfChanged(context,changed,reason){changed&&await writeSettings(context.target.pmRoot,context.settings,reason)}function hasGovernanceValidationMirrorChange(governanceValue,validationValue,nextPolicy){return governanceValue!==nextPolicy||validationValue!==nextPolicy}function buildPolicyResult(context,key,policy,changed){return withWarnings({scope:context.scope,key,policy,settings_path:context.target.settingsPath,changed},context.warnings)}function buildCriteriaResult(context,key,criteria,changed){return withWarnings({scope:context.scope,key,criteria,settings_path:context.target.settingsPath,changed},context.warnings)}async function setItemFormatConfig(context,options){const nextFormat=normalizeItemFormat(options.format),changed=context.settings.item_format!==nextFormat||!context.metadata.has_explicit_item_format;let migration;if(changed){const typeRegistry=resolveItemTypeRegistry(context.settings,getActiveExtensionRegistrations()),migrated=await migrateItemFilesToFormat(context.target.pmRoot,nextFormat,"config:set:item_format:migrate",typeRegistry.type_to_folder,context.settings.schema);migration={target_format:migrated.target_format,scanned:migrated.scanned,migrated:migrated.migrated,removed:migrated.removed,warnings:migrated.warnings},context.settings.item_format=nextFormat,await writeSettings(context.target.pmRoot,context.settings,"config:set:item_format")}return withWarnings({scope:context.scope,key:"item_format",format:context.settings.item_format,has_explicit_item_format:!0,migration,settings_path:context.target.settingsPath,changed},context.warnings)}async function setValidationConfig(context,key,options){if(key==="history_missing_stream_policy"){const nextPolicy2=normalizeHistoryMissingStreamPolicy(options.policy),changed2=context.settings.history.missing_stream!==nextPolicy2;return context.settings.history.missing_stream=nextPolicy2,await writeConfigSettingsIfChanged(context,changed2,"config:set:history_missing_stream_policy"),buildPolicyResult(context,key,context.settings.history.missing_stream,changed2)}if(key==="sprint_release_format_policy"){const nextPolicy2=normalizeSprintReleaseFormatPolicy(options.policy),changed2=context.settings.validation.sprint_release_format!==nextPolicy2;return context.settings.validation.sprint_release_format=nextPolicy2,await writeConfigSettingsIfChanged(context,changed2,"config:set:sprint_release_format_policy"),buildPolicyResult(context,key,context.settings.validation.sprint_release_format,changed2)}if(key==="parent_reference_policy"){const nextPolicy2=normalizeParentReferencePolicy(options.policy),changed2=context.settings.validation.parent_reference!==nextPolicy2||context.settings.governance.preset!=="custom"||context.settings.governance.parent_reference!==nextPolicy2;return context.settings.validation.parent_reference=nextPolicy2,context.settings.governance.preset="custom",context.settings.governance.parent_reference=nextPolicy2,await writeConfigSettingsIfChanged(context,changed2,"config:set:parent_reference_policy"),buildPolicyResult(context,key,context.settings.validation.parent_reference,changed2)}const nextPolicy=normalizeValidateMetadataProfile(options.policy),changed=context.settings.validation.metadata_profile!==nextPolicy||context.settings.governance.preset!=="custom"||context.settings.governance.metadata_profile!==nextPolicy;return context.settings.validation.metadata_profile=nextPolicy,context.settings.governance.preset="custom",context.settings.governance.metadata_profile=nextPolicy,await writeConfigSettingsIfChanged(context,changed,"config:set:metadata_validation_profile"),buildPolicyResult(context,key,context.settings.validation.metadata_profile,changed)}async function setCriteriaConfig(context,key,options){if(key==="metadata_required_fields"){const nextCriteria2=normalizeMetadataRequiredFields(options.criterion,options.clearCriteria),changed2=nextCriteria2.length!==context.settings.validation.metadata_required_fields.length||nextCriteria2.some((value,index)=>value!==context.settings.validation.metadata_required_fields[index]);return context.settings.validation.metadata_required_fields=nextCriteria2,await writeConfigSettingsIfChanged(context,changed2,"config:set:metadata_required_fields"),buildCriteriaResult(context,key,[...context.settings.validation.metadata_required_fields],changed2)}const currentCriteria={lifecycle_stale_blocker_reason_patterns:context.settings.validation.lifecycle_stale_blocker_reason_patterns,lifecycle_closure_like_blocked_reason_patterns:context.settings.validation.lifecycle_closure_like_blocked_reason_patterns,lifecycle_closure_like_resolution_patterns:context.settings.validation.lifecycle_closure_like_resolution_patterns,lifecycle_closure_like_actual_result_patterns:context.settings.validation.lifecycle_closure_like_actual_result_patterns}[key],nextCriteria=normalizeLifecyclePatternCriteria(key,options.criterion,options.clearCriteria),changed=nextCriteria.length!==currentCriteria.length||nextCriteria.some((value,index)=>value!==currentCriteria[index]);return currentCriteria.splice(0,currentCriteria.length,...nextCriteria),await writeConfigSettingsIfChanged(context,changed,`config:set:${key}`),buildCriteriaResult(context,key,[...currentCriteria],changed)}async function setGovernancePresetOrTypeConfig(context,key,options){if(key==="governance_preset"){const nextPolicy=normalizeGovernancePreset(options.policy),changed2=context.settings.governance.preset!==nextPolicy;return context.settings.governance.preset=nextPolicy,await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_preset"),buildPolicyResult(context,key,context.settings.governance.preset,changed2)}const policyProvided=typeof options.policy=="string",rawType=policyProvided?options.policy.trim():"";if(policyProvided&&rawType.length===0){const changed2=context.settings.governance.create_default_type!==void 0;return delete context.settings.governance.create_default_type,await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_create_default_type"),buildPolicyResult(context,key,context.settings.governance.create_default_type??"",changed2)}if(rawType.length===0)throw new PmCliError('Config set governance-create-default-type requires an item type value (or an empty value "" to clear it)',EXIT_CODE.USAGE);const typeRegistry=resolveItemTypeRegistry(context.settings,getActiveExtensionRegistrations()),resolvedType=resolveTypeName(rawType,typeRegistry);if(!resolvedType)throw new PmCliError(buildInvalidTypeError(rawType,typeRegistry.types,resolveItemTypesFilePath(context.target.pmRoot,context.settings.schema)),EXIT_CODE.USAGE);const changed=context.settings.governance.create_default_type!==resolvedType;return context.settings.governance.create_default_type=resolvedType,await writeConfigSettingsIfChanged(context,changed,"config:set:governance_create_default_type"),buildPolicyResult(context,key,context.settings.governance.create_default_type,changed)}async function setGovernancePolicyConfig(context,key,options){if(key==="governance_ownership_enforcement"){const nextPolicy2=normalizeGovernanceOwnershipEnforcement(options.policy),changed2=context.settings.governance.preset!=="custom"||context.settings.governance.ownership_enforcement!==nextPolicy2;return context.settings.governance.preset="custom",context.settings.governance.ownership_enforcement=nextPolicy2,await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_ownership_enforcement"),buildPolicyResult(context,key,context.settings.governance.ownership_enforcement,changed2)}if(key==="governance_create_mode_default"){const nextPolicy2=normalizeGovernanceCreateModeDefault(options.policy),changed2=context.settings.governance.preset!=="custom"||context.settings.governance.create_mode_default!==nextPolicy2;return context.settings.governance.preset="custom",context.settings.governance.create_mode_default=nextPolicy2,await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_create_mode_default"),buildPolicyResult(context,key,context.settings.governance.create_mode_default,changed2)}const nextPolicy=normalizeGovernanceCloseValidationDefault(options.policy),changed=context.settings.governance.preset!=="custom"||context.settings.governance.close_validation_default!==nextPolicy;return context.settings.governance.preset="custom",context.settings.governance.close_validation_default=nextPolicy,await writeConfigSettingsIfChanged(context,changed,"config:set:governance_close_validation_default"),buildPolicyResult(context,key,context.settings.governance.close_validation_default,changed)}async function setGovernanceValidationConfig(context,key,options){if(key==="governance_parent_reference_policy"){const nextPolicy2=normalizeParentReferencePolicy(options.policy),changed2=context.settings.governance.preset!=="custom"||hasGovernanceValidationMirrorChange(context.settings.governance.parent_reference,context.settings.validation.parent_reference,nextPolicy2);return context.settings.governance.preset="custom",context.settings.governance.parent_reference=nextPolicy2,context.settings.validation.parent_reference=nextPolicy2,await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_parent_reference_policy"),buildPolicyResult(context,key,context.settings.governance.parent_reference,changed2)}if(key==="governance_metadata_validation_profile"){const nextPolicy2=normalizeValidateMetadataProfile(options.policy),changed2=context.settings.governance.preset!=="custom"||hasGovernanceValidationMirrorChange(context.settings.governance.metadata_profile,context.settings.validation.metadata_profile,nextPolicy2);return context.settings.governance.preset="custom",context.settings.governance.metadata_profile=nextPolicy2,context.settings.validation.metadata_profile=nextPolicy2,await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_metadata_validation_profile"),buildPolicyResult(context,key,context.settings.governance.metadata_profile,changed2)}const nextPolicy=normalizeGovernanceWorkflowEnforcement(options.policy),changed=(context.settings.governance.workflow_enforcement??"off")!==nextPolicy;return context.settings.governance.workflow_enforcement=nextPolicy,await writeConfigSettingsIfChanged(context,changed,"config:set:governance_workflow_enforcement"),buildPolicyResult(context,key,context.settings.governance.workflow_enforcement,changed)}async function setGovernanceBooleanConfig(context,key,options){if(key==="governance_require_close_reason"){const nextEnabled2=normalizeGovernanceRequireCloseReasonPolicy(options.policy)==="enabled",changed2=context.settings.governance.require_close_reason!==nextEnabled2;return context.settings.governance.require_close_reason=nextEnabled2,await writeConfigSettingsIfChanged(context,changed2,"config:set:governance_require_close_reason"),buildPolicyResult(context,key,context.settings.governance.require_close_reason?"enabled":"disabled",changed2)}const nextEnabled=normalizeGovernanceForceRequiredForStaleLockPolicy(options.policy)==="enabled",changed=context.settings.governance.preset!=="custom"||context.settings.governance.force_required_for_stale_lock!==nextEnabled;return context.settings.governance.preset="custom",context.settings.governance.force_required_for_stale_lock=nextEnabled,await writeConfigSettingsIfChanged(context,changed,"config:set:governance_force_required_for_stale_lock"),buildPolicyResult(context,key,context.settings.governance.force_required_for_stale_lock?"enabled":"disabled",changed)}async function setTrackingConfig(context,key,options){if(key==="test_result_tracking"){const nextEnabled2=normalizeTestResultTrackingPolicy(options.policy)==="enabled",changed2=context.settings.testing.record_results_to_items!==nextEnabled2;return context.settings.testing.record_results_to_items=nextEnabled2,await writeConfigSettingsIfChanged(context,changed2,"config:set:test_result_tracking"),buildPolicyResult(context,key,context.settings.testing.record_results_to_items?"enabled":"disabled",changed2)}if(key==="untrusted_linked_test_execution"){const nextEnabled2=normalizeEnabledDisabledPolicy(options.policy,"untrusted-linked-test-execution")==="enabled",changed2=context.settings.testing.allow_untrusted_linked_tests!==nextEnabled2;return context.settings.testing.allow_untrusted_linked_tests=nextEnabled2,await writeConfigSettingsIfChanged(context,changed2,"config:set:untrusted_linked_test_execution"),buildPolicyResult(context,key,context.settings.testing.allow_untrusted_linked_tests?"enabled":"disabled",changed2)}const nextEnabled=normalizeTelemetryTrackingPolicy(options.policy)==="enabled",changed=context.settings.telemetry.enabled!==nextEnabled||!context.settings.telemetry.first_run_prompt_completed;return context.settings.telemetry.enabled=nextEnabled,context.settings.telemetry.first_run_prompt_completed=!0,await writeConfigSettingsIfChanged(context,changed,"config:set:telemetry_tracking"),buildPolicyResult(context,key,context.settings.telemetry.enabled?"enabled":"disabled",changed)}async function setDefinitionOfDoneConfig(context,key,options){const nextCriteria=normalizeCriteria(options.criterion,options.clearCriteria),changed=nextCriteria.length!==context.settings.workflow.definition_of_done.length||nextCriteria.some((value,index)=>value!==context.settings.workflow.definition_of_done[index]);return context.settings.workflow.definition_of_done=nextCriteria,await writeConfigSettingsIfChanged(context,changed,"config:set:definition_of_done"),buildCriteriaResult(context,key,[...context.settings.workflow.definition_of_done],changed)}function parseAgentIdentityVocabularyOperation(raw){const policy=raw?.trim().toLowerCase().replaceAll("_","-"),dryRun=policy?.startsWith("preview-")===!0,operation=dryRun?policy.slice(8):policy;if(operation==="add"||operation==="remove"||operation==="clear")return{operation,dryRun};throw new PmCliError("Config set agent-identity-vocabulary requires --policy add|remove|clear|preview-add|preview-remove|preview-clear",EXIT_CODE.USAGE)}function parseAgentIdentityVocabularyMutationValue(operation,value){if(operation==="add"){const separator=value?.lastIndexOf("=")??-1;if(separator<=0||separator===value.length-1)throw new PmCliError('Config set agent-identity-vocabulary --policy add requires --value "<legacy-author>=<canonical-harness>"',EXIT_CODE.USAGE);return{legacy_author:value.slice(0,separator),canonical_harness:value.slice(separator+1)}}if(operation==="remove"){if(value===void 0)throw new PmCliError("Config set agent-identity-vocabulary --policy remove requires --value <legacy-author>",EXIT_CODE.USAGE);return{legacy_author:value}}if(value!==void 0)throw new PmCliError("Config set agent-identity-vocabulary --policy clear does not accept --value",EXIT_CODE.USAGE);return{}}async function setAgentIdentityVocabularyConfig(context,options){const{operation,dryRun}=parseAgentIdentityVocabularyOperation(options.policy),mutationValue=parseAgentIdentityVocabularyMutationValue(operation,options.value);let planned;try{planned=planAgentIdentityVocabularyMutation(context.settings.agent_identity?.identity_vocabulary,{operation,...mutationValue,observed_authors:options.criterion})}catch(error){throw new PmCliError(error.message,EXIT_CODE.USAGE)}return planned.preview.changed&&!dryRun&&(context.settings.agent_identity={...context.settings.agent_identity,identity_vocabulary:planned.vocabulary},await writeConfigSettingsIfChanged(context,!0,`config:set:agent_identity.identity_vocabulary:${operation}:v${planned.preview.version_after}`)),withWarnings({scope:context.scope,key:"agent_identity_vocabulary",identity_vocabulary:summarizeAgentIdentityVocabulary(dryRun?context.settings.agent_identity?.identity_vocabulary:planned.vocabulary),vocabulary_mutation:planned.preview,settings_path:context.target.settingsPath,changed:planned.preview.changed&&!dryRun},context.warnings)}async function setConfigValue(context,key,options){if(options.clearCriteria===!0&&!isCriteriaConfigKey(key))throw new PmCliError("--clear-criteria is only supported with config set criteria-list keys",EXIT_CODE.USAGE);return key==="item_format"?setItemFormatConfig(context,options):key==="context"?applyContextConfig(context.settings,options,context.target,context.scope,context.warnings):key==="agent_identity_vocabulary"?setAgentIdentityVocabularyConfig(context,options):key==="definition_of_done"?setDefinitionOfDoneConfig(context,key,options):isCriteriaValueConfigKey(key)?setCriteriaConfig(context,key,options):TRACKING_CONFIG_KEYS.has(key)?setTrackingConfig(context,key,options):GOVERNANCE_BOOLEAN_CONFIG_KEYS.has(key)?setGovernanceBooleanConfig(context,key,options):isGovernancePolicyConfigKey(key)?setGovernancePolicyConfig(context,key,options):isGovernanceValidationConfigKey(key)?setGovernanceValidationConfig(context,key,options):isGovernancePresetOrTypeConfigKey(key)?setGovernancePresetOrTypeConfig(context,key,options):setValidationConfig(context,key,options)}async function runConfig(scopeValue,actionValue,keyValue,options,global2,valueValue){const scope=normalizeScope(scopeValue),action=normalizeAction(actionValue),nestedSetting=action==="get"||action==="set"?resolveNestedSettingDescriptor(keyValue):void 0,key=nestedSetting?void 0:normalizeKeyForAction(action,keyValue),routedOptions=applyPositionalValue(action,keyValue,key,nestedSetting,valueValue,options),target=await resolveSettingsTarget(scope,global2),{settings,metadata,warnings:settingsReadWarnings}=await readSettingsWithMetadata(target.pmRoot),context={scope,target,settings,metadata,warnings:normalizeWarnings(settingsReadWarnings)};return nestedSetting?buildNestedSettingResult(context,action,nestedSetting,routedOptions):action==="list"?buildConfigListResult(context):action==="export"?buildConfigExportResult(context):(assertConfigKeyDefined(key),action==="get"?buildConfigGetResult(context,key):setConfigValue(context,key,routedOptions))}const _testOnlyConfigCommand={hasGovernanceValidationMirrorChange,applyPositionalValue,normalizeAction,normalizeCriteria,normalizeGovernanceCloseValidationDefault,normalizeGovernanceCreateModeDefault,normalizeGovernanceForceRequiredForStaleLockPolicy,normalizeGovernanceOwnershipEnforcement,normalizeGovernancePreset,normalizeGovernanceRequireCloseReasonPolicy,normalizeGovernanceWorkflowEnforcement,normalizeHistoryMissingStreamPolicy,normalizeItemFormat,normalizeKey,normalizeMetadataRequiredFields,normalizePolicyForConflict,normalizeScope,normalizeTelemetryTrackingPolicy,normalizeTestResultTrackingPolicy,normalizeValidateMetadataProfile,normalizeWarnings};export{_testOnlyConfigCommand,runConfig};
|
|
2
2
|
//# sourceMappingURL=config.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]="9cdfc765-7370-57bb-a4dc-be2df8aa1e6f")}catch{}})();import{isMillisecondPrecisionRfc3339DateTime,resolveIsoOrRelative}from"../../core/shared/time.js";const CONTEXT_RECENCY_EPOCH="1970-01-01T00:00:00.000Z";function canonicalizeContextRecencyCoordinate(value){if(typeof value!="string")return null;const trimmed=value.trim();if(!isMillisecondPrecisionRfc3339DateTime(trimmed)&&!/^\d{4}-\d{2}-\d{2}$/u.test(trimmed))return null;try{return resolveIsoOrRelative(trimmed,new Date(Number.NaN),"context signal recency coordinate")}catch{return null}}export{CONTEXT_RECENCY_EPOCH,canonicalizeContextRecencyCoordinate};
|
|
2
2
|
//# sourceMappingURL=recency.js.map
|