@unbrained/pm-cli 2026.9.7 → 2026.9.8
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/.agents/skills/pm-developer/SKILL.md +12 -4
- package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +19 -10
- package/.agents/skills/pm-extensions/SKILL.md +6 -0
- package/.agents/skills/pm-sdk/SKILL.md +11 -2
- package/.agents/skills/pm-user/SKILL.md +5 -0
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +211 -181
- package/dist/cli/after-command-context-usage.js +1 -48
- package/dist/cli/argv-utils.js +1 -40
- package/dist/cli/bootstrap-args.js +1 -9
- package/dist/cli/bundle-integrity.js +2 -110
- package/dist/cli/commander-usage.js +11 -771
- package/dist/cli/commands/activity.js +1 -9
- package/dist/cli/commands/aggregate.js +1 -5
- package/dist/cli/commands/append.js +1 -5
- package/dist/cli/commands/claim.js +1 -5
- package/dist/cli/commands/close-many.js +1 -5
- package/dist/cli/commands/close.js +1 -9
- package/dist/cli/commands/comments.js +1 -5
- package/dist/cli/commands/config.js +1 -9
- package/dist/cli/commands/context.js +1 -9
- package/dist/cli/commands/contracts.js +1 -5
- package/dist/cli/commands/copy.js +1 -9
- package/dist/cli/commands/create.js +1 -9
- package/dist/cli/commands/delete.js +1 -9
- package/dist/cli/commands/deps.js +1 -9
- package/dist/cli/commands/docs.js +1 -9
- package/dist/cli/commands/duplicates.js +1 -9
- package/dist/cli/commands/eval.js +1 -9
- package/dist/cli/commands/extension/describe.js +1 -5
- package/dist/cli/commands/extension/scaffold.js +1 -5
- package/dist/cli/commands/extension/shared.js +1 -5
- package/dist/cli/commands/extension.js +1 -9
- package/dist/cli/commands/files.js +1 -9
- package/dist/cli/commands/focus.js +1 -9
- package/dist/cli/commands/gc.js +1 -9
- package/dist/cli/commands/get.js +1 -9
- package/dist/cli/commands/graph.js +1 -10
- package/dist/cli/commands/health.js +1 -9
- package/dist/cli/commands/history-compact.js +1 -10
- package/dist/cli/commands/history-redact.js +1 -11
- package/dist/cli/commands/history-repair.js +1 -10
- package/dist/cli/commands/history.js +1 -5
- package/dist/cli/commands/index.js +1 -58
- package/dist/cli/commands/init-agent-guidance.js +1 -9
- package/dist/cli/commands/init.js +1 -9
- package/dist/cli/commands/learnings.js +1 -5
- package/dist/cli/commands/lifecycle-transitions.js +1 -5
- package/dist/cli/commands/list.js +1 -9
- package/dist/cli/commands/merge.js +1 -11
- package/dist/cli/commands/next.js +1 -9
- package/dist/cli/commands/notes.js +1 -5
- package/dist/cli/commands/plan.js +1 -9
- package/dist/cli/commands/profile.js +1 -9
- package/dist/cli/commands/restore.js +1 -9
- package/dist/cli/commands/scheduling-shortcuts.js +1 -9
- package/dist/cli/commands/schema.js +1 -10
- package/dist/cli/commands/search.js +1 -9
- package/dist/cli/commands/stats.js +1 -9
- package/dist/cli/commands/telemetry.js +1 -9
- package/dist/cli/commands/test-all.js +1 -9
- package/dist/cli/commands/test-runs.js +1 -9
- package/dist/cli/commands/test.js +1 -9
- package/dist/cli/commands/update-many.js +1 -5
- package/dist/cli/commands/update.js +1 -9
- package/dist/cli/commands/upgrade.js +1 -5
- package/dist/cli/commands/validate.js +1 -15
- package/dist/cli/context-intent-invocation.js +1 -20
- package/dist/cli/description-stdin.js +1 -17
- package/dist/cli/error-guidance.js +1 -1353
- package/dist/cli/extension-command-help.js +5 -636
- package/dist/cli/extension-command-options.js +1 -427
- package/dist/cli/extension-recovery.js +1 -126
- package/dist/cli/help-content.js +2 -1001
- package/dist/cli/help-json-payload.js +4 -570
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +5 -2573
- package/dist/cli/migration-gates.js +1 -289
- package/dist/cli/public.js +1 -20
- package/dist/cli/register-annotations.js +1 -270
- package/dist/cli/register-assurance.js +1 -62
- package/dist/cli/register-files-lookup.js +1 -56
- package/dist/cli/register-history-activity.d.ts +8 -0
- package/dist/cli/register-history-activity.js +2 -0
- package/dist/cli/register-history-author.js +1 -38
- package/dist/cli/register-history-maintenance.d.ts +9 -0
- package/dist/cli/register-history-maintenance.js +2 -0
- package/dist/cli/register-list-query.js +10 -943
- package/dist/cli/register-mutation-options.js +1 -9
- package/dist/cli/register-mutation.js +19 -1893
- package/dist/cli/register-operations.js +1 -920
- package/dist/cli/register-setup.js +1 -716
- package/dist/cli/register-structured-mutation.js +1 -196
- package/dist/cli/registration-helpers.js +1 -5
- package/dist/cli/runtime-compatibility-boundary.js +4 -42
- package/dist/cli/schema-registration-helpers.js +1 -73
- package/dist/cli/search-refresh.js +1 -13
- package/dist/cli/stats-analytics-json.js +1 -68
- package/dist/cli/telemetry-flush.js +1 -10
- package/dist/cli-bundle/bundle-manifest.json +164 -156
- package/dist/cli-bundle/chunks/chunk-3BZZA6A3.js +5 -0
- package/dist/cli-bundle/chunks/chunk-AMRDVX36.js +235 -0
- package/dist/cli-bundle/chunks/chunk-DAM4CBBR.js +2202 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FLDWYEND.js +77 -0
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-G5ADGQ2D.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-JAAEYHUA.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-JX4DH4WC.js → chunk-KR3RP4FH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-LEZOUXG6.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-QOEKOECV.js +29 -0
- package/dist/cli-bundle/chunks/chunk-RHSFOMHU.js +2 -0
- package/dist/cli-bundle/chunks/chunk-XOD2PCB6.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-YVEQ2AMO.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-KSK3R63M.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-IQ5C7U6O.js +20 -0
- package/dist/cli-bundle/chunks/{register-operations-I5W3KMGB.js → register-operations-DWVHR2NC.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-BQ5SVD4B.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-3WRPWLA7.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7MBUII7U.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-COPBO5HW.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-DUN4IXYN.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-EE5QSM4Z.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-HJVARYM3.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-IAUOUGVR.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-KOOMJ54F.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-MZDXX7JY.js +56 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-OPFHFGDD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QHNETP77.js +9 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-RMWES4M6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RXT4P5QH.js +10 -0
- package/dist/cli-bundle/focused-chunks/chunk-SDOL6FM2.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-SQV4AAUC.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-PEFABF7E.js → chunk-WE3IUNIW.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-YALOUBWJ.js +2 -0
- package/dist/cli-bundle/main.js +20 -20
- 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 +29 -29
- 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 +42 -42
- 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 +11 -11
- package/dist/cli.js +1 -104
- package/dist/core/checkpoint/checkpoint-gc.js +1 -169
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -133
- package/dist/core/config/nested-settings.js +1 -534
- package/dist/core/config/positional-value.js +1 -109
- package/dist/core/diagnostics/remediation.js +1 -506
- package/dist/core/extensions/activation-summary-markdown.js +2 -145
- package/dist/core/extensions/activation-summary.js +1 -92
- package/dist/core/extensions/activation-transaction.js +1 -46
- package/dist/core/extensions/capability-usage.js +1 -173
- package/dist/core/extensions/command-hook-context.js +1 -13
- package/dist/core/extensions/command-metadata-contract.js +1 -22
- package/dist/core/extensions/command-visibility-tier.js +1 -29
- package/dist/core/extensions/contribution-inventory.js +1 -173
- package/dist/core/extensions/exporter-output-contract.js +1 -66
- package/dist/core/extensions/extension-candidate.js +1 -18
- package/dist/core/extensions/extension-capability-aliases.js +1 -158
- package/dist/core/extensions/extension-hook-runtime.js +1 -699
- package/dist/core/extensions/extension-policy.js +1 -599
- package/dist/core/extensions/extension-registries.js +1 -62
- package/dist/core/extensions/extension-runtime-helpers.js +1 -33
- package/dist/core/extensions/extension-types.js +1 -102
- package/dist/core/extensions/flag-definition-validation.js +1 -52
- package/dist/core/extensions/flag-value-types.js +1 -64
- package/dist/core/extensions/index.js +1 -526
- package/dist/core/extensions/item-field-types.js +1 -39
- package/dist/core/extensions/item-fields.js +1 -261
- package/dist/core/extensions/loader.js +1 -2223
- package/dist/core/extensions/manifest-schema.js +1 -69
- package/dist/core/extensions/module-graph-snapshot.js +1 -33
- package/dist/core/extensions/preflight-ownership.js +1 -41
- package/dist/core/extensions/registration-validation.js +1 -82
- package/dist/core/extensions/registration-values.js +1 -209
- package/dist/core/extensions/reserved-host-flags.js +1 -36
- package/dist/core/extensions/runtime-registrations.js +1 -67
- package/dist/core/extensions/service-ownership.js +1 -19
- package/dist/core/extensions/version-compat.js +1 -216
- package/dist/core/fs/fs-utils.js +2 -158
- package/dist/core/fs/host-environment-errors.js +1 -141
- package/dist/core/fs/index.js +1 -9
- package/dist/core/fs/path-utils.js +1 -17
- package/dist/core/governance/content-fields.js +1 -160
- package/dist/core/governance/issue-codes.js +1 -151
- package/dist/core/governance/metadata-coverage.js +1 -358
- package/dist/core/history/drift-cache.js +3 -72
- package/dist/core/history/drift-scan.js +1 -342
- package/dist/core/history/event-classification.js +1 -109
- package/dist/core/history/event-index.js +8 -784
- package/dist/core/history/history-compact-bulk.js +1 -104
- package/dist/core/history/history-diff.js +1 -158
- package/dist/core/history/history-rewrite.d.ts +6 -1
- package/dist/core/history/history-rewrite.js +1 -107
- package/dist/core/history/history-storage-stats.js +1 -102
- package/dist/core/history/history-stream-policy.js +1 -62
- package/dist/core/history/history.js +2 -617
- package/dist/core/history/identity.js +1 -30
- package/dist/core/history/index.js +1 -9
- package/dist/core/history/projection.js +1 -196
- package/dist/core/history/read.d.ts +9 -0
- package/dist/core/history/read.js +1 -57
- package/dist/core/history/replay.js +2 -439
- package/dist/core/history/version-address.js +1 -32
- package/dist/core/history/workspace-history.js +2 -433
- package/dist/core/io/body-file.js +1 -62
- package/dist/core/io/bulk-ids-input.js +1 -112
- package/dist/core/item/actionability.js +1 -327
- package/dist/core/item/dependency-reference.js +1 -20
- package/dist/core/item/id.js +1 -112
- package/dist/core/item/index.js +1 -12
- package/dist/core/item/item-format-version.js +1 -78
- package/dist/core/item/item-format.js +5 -1473
- package/dist/core/item/item-record.js +1 -23
- package/dist/core/item/item-type-definition.js +1 -133
- package/dist/core/item/parent-reference-policy.js +1 -57
- package/dist/core/item/parse.js +2 -603
- package/dist/core/item/plan-lifecycle.js +1 -19
- package/dist/core/item/priority.js +1 -61
- package/dist/core/item/sprint-release-format.js +1 -38
- package/dist/core/item/status-filter.js +1 -115
- package/dist/core/item/status.js +1 -43
- package/dist/core/item/toon-decode.js +1 -29
- package/dist/core/item/type-registry.js +1 -715
- package/dist/core/item/type-synonyms.js +1 -38
- package/dist/core/lock/index.js +1 -9
- package/dist/core/lock/lock-gc.js +1 -240
- package/dist/core/lock/lock.js +3 -590
- package/dist/core/output/mutation-projection.js +1 -217
- package/dist/core/output/output-control.js +1 -25
- package/dist/core/output/output.js +11 -494
- package/dist/core/output/query-summary.js +1 -58
- package/dist/core/output/tabular.js +1 -77
- package/dist/core/packages/manifest.js +1 -244
- package/dist/core/packages/root.js +1 -84
- package/dist/core/profile/profile-describe.js +1 -83
- package/dist/core/profile/profile-lint.js +1 -415
- package/dist/core/profile/profile-plan.js +0 -0
- package/dist/core/profile/profile-presets.js +1 -370
- package/dist/core/reproducibility/context.js +1 -82
- package/dist/core/schema/fields-file.js +2 -288
- package/dist/core/schema/item-types-file.js +2 -296
- package/dist/core/schema/runtime-field-filters.js +1 -49
- package/dist/core/schema/runtime-field-values.js +1 -313
- package/dist/core/schema/runtime-schema.js +2 -826
- package/dist/core/schema/status-defs-file.js +2 -227
- package/dist/core/schema/status-token.js +1 -31
- package/dist/core/schema/type-inference.js +1 -95
- package/dist/core/schema/type-presets.js +1 -87
- package/dist/core/schema/type-workflows.js +1 -104
- package/dist/core/search/background-refresh.js +2 -286
- package/dist/core/search/bm25.js +1 -146
- package/dist/core/search/cache.js +2 -534
- package/dist/core/search/corpus.js +1 -311
- package/dist/core/search/embedding-batches.js +1 -163
- package/dist/core/search/eval.js +1 -225
- package/dist/core/search/http-client.js +1 -75
- package/dist/core/search/providers.js +1 -242
- package/dist/core/search/relevance.js +1 -244
- package/dist/core/search/semantic-defaults.js +1 -199
- package/dist/core/search/staleness.js +1 -30
- package/dist/core/search/vector-stores.js +2 -664
- package/dist/core/search/vectorization-metadata.js +1 -81
- package/dist/core/sentry/helpers.js +1 -272
- package/dist/core/sentry/instrument.js +1 -387
- package/dist/core/session/session-state.js +1 -260
- package/dist/core/shared/agent-session-context.js +1 -133
- package/dist/core/shared/author.js +1 -1172
- package/dist/core/shared/command-types.js +1 -4
- package/dist/core/shared/conflict-markers.js +1 -31
- package/dist/core/shared/constants.js +1 -405
- package/dist/core/shared/errors.js +1 -20
- package/dist/core/shared/html-entity-decode.js +1 -131
- package/dist/core/shared/index.js +1 -12
- package/dist/core/shared/item-metadata-contract.js +1 -89
- package/dist/core/shared/lazy-module.js +1 -16
- package/dist/core/shared/levenshtein.js +1 -61
- package/dist/core/shared/memo.js +1 -19
- package/dist/core/shared/numeric-parsers.js +1 -20
- package/dist/core/shared/option-alias-visibility.js +1 -67
- package/dist/core/shared/primitives.js +1 -127
- package/dist/core/shared/serial-queue.js +1 -79
- package/dist/core/shared/serialization.js +1 -210
- package/dist/core/shared/split-comma-list.js +1 -30
- package/dist/core/shared/text-normalization.js +1 -38
- package/dist/core/shared/time.js +1 -306
- package/dist/core/store/index.js +1 -12
- package/dist/core/store/item-format-migration.js +1 -125
- package/dist/core/store/item-metadata-cache.js +1 -1116
- package/dist/core/store/item-metadata-query-index.js +9 -394
- package/dist/core/store/item-metadata-read-work.js +1 -43
- package/dist/core/store/item-store.js +1 -693
- package/dist/core/store/paths.d.ts +1 -1
- package/dist/core/store/paths.js +1 -214
- package/dist/core/store/settings-read-cache.js +1 -85
- package/dist/core/store/settings-validator.js +1 -421
- package/dist/core/store/settings.js +3 -1309
- package/dist/core/store/tracker-preflight.js +1 -141
- package/dist/core/telemetry/consent.js +5 -108
- package/dist/core/telemetry/observability.js +1 -246
- package/dist/core/telemetry/runtime.js +4 -1988
- package/dist/core/test/background-runs.js +4 -945
- package/dist/core/test/item-test-run-tracking.js +1 -63
- package/dist/core/test/run-selectors.js +1 -120
- package/dist/core/validate/estimate-defaults.js +1 -89
- package/dist/core/validate/fix-planning.js +1 -189
- package/dist/core/validate/linked-artifact-reference.js +1 -36
- package/dist/core/validate/missing-by-type.js +1 -34
- package/dist/core/validate/missing-link-owners.js +1 -95
- package/dist/core/validate/stale-file-classification.js +1 -82
- package/dist/mcp/http-server.js +5 -448
- package/dist/mcp/legacy-adapter.js +1 -77
- package/dist/mcp/runtime-capabilities.js +1 -200
- package/dist/mcp/server.js +4 -1233
- package/dist/mcp/tool-definitions.js +1 -804
- package/dist/sdk/actionability.js +1 -13
- package/dist/sdk/agent/closed-domain-contracts.js +1 -161
- package/dist/sdk/agent/command-recovery.js +1 -59
- package/dist/sdk/agent/command-suggestions.js +1 -66
- package/dist/sdk/agent/create-option-policy.js +1 -31
- package/dist/sdk/agent/identity-config.js +1 -106
- package/dist/sdk/agent/item-addressing.js +1 -207
- package/dist/sdk/agent/refusal-closure-census.js +1 -151
- package/dist/sdk/agent/refusal-closure.js +1 -133
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -193
- package/dist/sdk/agent/refusal-reachability.js +1 -593
- package/dist/sdk/agent/subcommand-recovery.js +1 -83
- package/dist/sdk/agent/task-transcript-contracts.js +1 -197
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -126
- package/dist/sdk/agent-capability-contracts.js +1 -428
- package/dist/sdk/agent-session-context.js +1 -9
- package/dist/sdk/annotations.js +1 -448
- package/dist/sdk/author-attribution.js +1 -468
- package/dist/sdk/authoring.js +1 -20
- package/dist/sdk/cli-bootstrap.js +1 -838
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +4 -476
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -79
- package/dist/sdk/cli-contracts/command-aliases.d.ts +4 -0
- package/dist/sdk/cli-contracts/command-aliases.js +1 -107
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -151
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1081
- package/dist/sdk/cli-contracts/commander-types.js +1 -159
- package/dist/sdk/cli-contracts/completeness.js +1 -393
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -222
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1947
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -347
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -986
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -990
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -2090
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -324
- package/dist/sdk/cli-contracts/string-lists.js +1 -16
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -461
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -2167
- package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1664
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -4
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -17
- package/dist/sdk/cli-program.js +1 -49
- package/dist/sdk/command-line.d.ts +2 -5
- package/dist/sdk/command-line.js +1 -78
- package/dist/sdk/comments.js +1 -133
- package/dist/sdk/compile-cache.js +1 -73
- package/dist/sdk/completion.js +157 -837
- package/dist/sdk/compose.js +1 -1090
- package/dist/sdk/config.js +1 -1204
- package/dist/sdk/context/recency.js +1 -33
- package/dist/sdk/context/semantic-session-attribution.js +1 -82
- package/dist/sdk/context/usage-egress.js +1 -29
- package/dist/sdk/context/usage-ledger.js +3 -185
- package/dist/sdk/context-intent-contracts.js +1 -709
- package/dist/sdk/context-intent-runtime.js +1 -115
- package/dist/sdk/context-packing.js +1 -218
- package/dist/sdk/context-relevance.js +1 -503
- package/dist/sdk/context-signal-store.js +2 -426
- package/dist/sdk/context-usage.js +1 -367
- package/dist/sdk/contracts.js +1 -23
- package/dist/sdk/core-governance.js +1 -14
- package/dist/sdk/core.js +1 -14
- package/dist/sdk/corpus-shape.js +1 -401
- package/dist/sdk/define.js +1 -220
- package/dist/sdk/dependencies.js +1 -718
- package/dist/sdk/dependency-flag-validation.js +1 -156
- package/dist/sdk/dependency-provenance.js +1 -135
- package/dist/sdk/docs.js +1 -14
- package/dist/sdk/duplicates.js +1 -40
- package/dist/sdk/environment/agent-environment.js +1 -466
- package/dist/sdk/environment/host-environment-errors.js +1 -8
- package/dist/sdk/environment/project-runtime-compatibility.js +1 -481
- package/dist/sdk/environment/source-context.js +1 -28
- package/dist/sdk/environment/tracker-preflight.js +1 -9
- package/dist/sdk/error-code-catalog.js +1 -153
- package/dist/sdk/error-runtime.js +1 -58
- package/dist/sdk/errors.js +1 -58
- package/dist/sdk/eval.js +1 -190
- package/dist/sdk/extension/author-manifest.js +1 -92
- package/dist/sdk/extension/bundled-catalog.js +1 -332
- package/dist/sdk/extension/concurrency.js +1 -25
- package/dist/sdk/extension/copy-scope.d.ts +2 -0
- package/dist/sdk/extension/copy-scope.js +2 -0
- package/dist/sdk/extension/custom-field-collisions.js +1 -30
- package/dist/sdk/extension/describe.js +3 -189
- package/dist/sdk/extension/doctor.js +1 -606
- package/dist/sdk/extension/install-plan.d.ts +69 -0
- package/dist/sdk/extension/install-plan.js +2 -0
- package/dist/sdk/extension/install-receipts.d.ts +7 -0
- package/dist/sdk/extension/install-receipts.js +2 -0
- package/dist/sdk/extension/install-runtime.js +3 -313
- package/dist/sdk/extension/install-snapshot.js +1 -66
- package/dist/sdk/extension/install-sources.js +5 -1057
- package/dist/sdk/extension/managed-state.js +2 -252
- package/dist/sdk/extension/migrations.js +2 -174
- package/dist/sdk/extension/output-ownership.js +1 -25
- package/dist/sdk/extension/runtime-summary.js +1 -18
- package/dist/sdk/extension/scaffold.js +4 -2308
- package/dist/sdk/extension/shared.js +1 -147
- package/dist/sdk/extension/source-resolution.js +1 -65
- package/dist/sdk/extension/update-check.js +1 -67
- package/dist/sdk/extension-command-context.js +1 -44
- package/dist/sdk/extension-contracts.js +1 -73
- package/dist/sdk/extension.d.ts +7 -2
- package/dist/sdk/extension.js +1 -2196
- package/dist/sdk/files.js +1 -535
- package/dist/sdk/flag-invocation-contracts.d.ts +0 -5
- package/dist/sdk/flag-invocation-contracts.js +1 -344
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -2224
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -2236
- package/dist/sdk/generated-error-code-catalog.js +1 -16
- package/dist/sdk/governance/assurance-action-contracts.js +1 -4
- package/dist/sdk/governance/assurance-action.js +1 -411
- package/dist/sdk/governance/assurance-limits.js +1 -10
- package/dist/sdk/governance/assurance-mutation-error.js +1 -81
- package/dist/sdk/governance/assurance-presets.js +1 -135
- package/dist/sdk/governance/assurance-runtime.js +1 -238
- package/dist/sdk/governance/assurance.js +4 -1182
- package/dist/sdk/governance/boundary-fixtures.js +1 -200
- package/dist/sdk/governance/coverage-assurance.js +1 -60
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -188
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -120
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -24
- package/dist/sdk/governance/defect-recurrence.js +1 -623
- package/dist/sdk/governance/extension-host-version.js +1 -115
- package/dist/sdk/governance/gc.js +1 -368
- package/dist/sdk/governance/health.js +1 -2367
- package/dist/sdk/governance/hierarchy-validation.js +1 -108
- package/dist/sdk/governance/linked-file-report.js +1 -71
- package/dist/sdk/governance/merge-receipt-history.js +1 -206
- package/dist/sdk/governance/provenance-health.js +1 -282
- package/dist/sdk/governance/reindex.js +4 -761
- package/dist/sdk/governance/stale-work.js +1 -82
- package/dist/sdk/governance/status-role-diagnostics.js +1 -35
- package/dist/sdk/governance/storage-integrity.js +1 -280
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -106
- package/dist/sdk/governance/upgrade.js +2 -327
- package/dist/sdk/governance/validate-history-drift.js +1 -81
- package/dist/sdk/governance/validate-item-reader.js +1 -17
- package/dist/sdk/governance/validate-normalization.js +1 -36
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +1 -0
- package/dist/sdk/governance.js +1 -31
- package/dist/sdk/graph/adapter.js +1 -181
- package/dist/sdk/graph/analytics.js +1 -474
- package/dist/sdk/graph/assembly.js +1 -377
- package/dist/sdk/graph/cache.js +1 -160
- package/dist/sdk/graph/centrality.js +1 -258
- package/dist/sdk/graph/conformance.js +1 -130
- package/dist/sdk/graph/deadline-scheduling.d.ts +90 -0
- package/dist/sdk/graph/deadline-scheduling.js +2 -0
- package/dist/sdk/graph/durable-cache.d.ts +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -361
- package/dist/sdk/graph/governance-contracts.js +1 -34
- package/dist/sdk/graph/governance.d.ts +13 -1
- package/dist/sdk/graph/governance.js +1 -735
- package/dist/sdk/graph/hierarchy-integrity.js +1 -310
- package/dist/sdk/graph/index.d.ts +3 -2
- package/dist/sdk/graph/index.js +1 -26
- package/dist/sdk/graph/lifecycle-coverage.d.ts +32 -0
- package/dist/sdk/graph/lifecycle-coverage.js +2 -0
- package/dist/sdk/graph/mutation-advisory.js +1 -176
- package/dist/sdk/graph/remediation.js +1 -197
- package/dist/sdk/graph/run.d.ts +15 -1
- package/dist/sdk/graph/run.js +1 -768
- package/dist/sdk/graph/scheduling.js +1 -124
- package/dist/sdk/graph/traversal.js +1 -284
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -27
- package/dist/sdk/graph.js +1 -15
- package/dist/sdk/guide-topics.js +1 -707
- package/dist/sdk/guide.js +1 -279
- package/dist/sdk/history/maintenance.d.ts +71 -0
- package/dist/sdk/history/maintenance.js +2 -0
- package/dist/sdk/history/salvage.js +2 -247
- package/dist/sdk/history/subject.d.ts +19 -0
- package/dist/sdk/history/subject.js +2 -0
- package/dist/sdk/history-analytics.js +1 -282
- package/dist/sdk/history-compact.js +1 -527
- package/dist/sdk/history-mcp.js +1 -68
- package/dist/sdk/history-provenance.js +1 -182
- package/dist/sdk/history-read.js +1 -96
- package/dist/sdk/history-redact.d.ts +1 -14
- package/dist/sdk/history-redact.js +1 -643
- package/dist/sdk/history-repair.d.ts +5 -0
- package/dist/sdk/history-repair.js +1 -657
- package/dist/sdk/improvement-ledger-validation.js +1 -62
- package/dist/sdk/improvement-ledger.js +2 -257
- package/dist/sdk/index.d.ts +4 -0
- package/dist/sdk/index.js +1 -183
- package/dist/sdk/init-agent-guidance.js +2 -496
- package/dist/sdk/init.js +2 -820
- package/dist/sdk/invocation-author.js +1 -39
- package/dist/sdk/item-children.js +1 -90
- package/dist/sdk/item-metadata-index.js +1 -15
- package/dist/sdk/item-schedule.js +1 -27
- package/dist/sdk/item-transaction.js +1 -396
- package/dist/sdk/learnings.js +1 -29
- package/dist/sdk/lifecycle/append.js +2 -53
- package/dist/sdk/lifecycle/claim.d.ts +2 -0
- package/dist/sdk/lifecycle/claim.js +1 -242
- package/dist/sdk/lifecycle/close-many.js +1 -438
- package/dist/sdk/lifecycle/close.js +1 -468
- package/dist/sdk/lifecycle/copy.js +1 -212
- package/dist/sdk/lifecycle/create.js +1 -1949
- package/dist/sdk/lifecycle/delete.js +1 -45
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -91
- package/dist/sdk/lifecycle/focus.js +1 -91
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -24
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -149
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -40
- package/dist/sdk/lifecycle/mcp-actions.d.ts +2 -0
- package/dist/sdk/lifecycle/mcp-actions.js +1 -51
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -46
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -9
- package/dist/sdk/lifecycle/plan.js +1 -1606
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -147
- package/dist/sdk/lifecycle/reopen.js +1 -68
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +1 -143
- package/dist/sdk/lifecycle/restore.d.ts +1 -0
- package/dist/sdk/lifecycle/restore.js +1 -330
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -295
- package/dist/sdk/lifecycle/update-many.js +1 -861
- package/dist/sdk/lifecycle/update.js +1 -2136
- package/dist/sdk/lifecycle-completion.js +1 -92
- package/dist/sdk/lifecycle-policy.js +1 -120
- package/dist/sdk/linked-artifacts.js +1 -530
- package/dist/sdk/mcp/apps.js +4 -133
- package/dist/sdk/mcp/authorization.js +1 -404
- package/dist/sdk/mcp/discovery.js +1 -494
- package/dist/sdk/mcp/interactions.js +1 -336
- package/dist/sdk/mcp/protocol.d.ts +7 -0
- package/dist/sdk/mcp/protocol.js +1 -184
- package/dist/sdk/mcp/skills.js +1 -389
- package/dist/sdk/mcp/subscriptions.js +1 -211
- package/dist/sdk/mcp/tasks.js +2 -430
- package/dist/sdk/mcp/transport.js +1 -260
- package/dist/sdk/merge/abandoned-receipts.js +1 -46
- package/dist/sdk/merge/driver.js +1 -212
- package/dist/sdk/merge/index.js +1 -16
- package/dist/sdk/merge/install.js +3 -561
- package/dist/sdk/merge/receipt-file-boundary.js +1 -46
- package/dist/sdk/merge/receipt-operation.js +1 -96
- package/dist/sdk/merge/receipt-schema.js +1 -397
- package/dist/sdk/merge/receipts.js +4 -525
- package/dist/sdk/merge/reconcile.js +1 -352
- package/dist/sdk/merge/three-way.js +3 -775
- package/dist/sdk/merge.js +1 -10
- package/dist/sdk/mutation-events.js +1 -292
- package/dist/sdk/mutation-guard.js +1 -216
- package/dist/sdk/notes.js +1 -139
- package/dist/sdk/output-contracts.js +1 -172
- package/dist/sdk/output-projection.js +1 -430
- package/dist/sdk/output-token-accounting.js +1 -140
- package/dist/sdk/output.js +1 -64
- package/dist/sdk/ownership-source.js +1 -21
- package/dist/sdk/package-import-adapters.js +1 -442
- package/dist/sdk/package-migrations.js +1 -20
- package/dist/sdk/package-runtime-options.js +1 -80
- package/dist/sdk/pagination.js +1 -162
- package/dist/sdk/profile.js +1 -454
- package/dist/sdk/provenance.js +1 -258
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -401
- package/dist/sdk/query/aggregate.d.ts +16 -0
- package/dist/sdk/query/aggregate.js +1 -390
- package/dist/sdk/query/calendar.js +1 -964
- package/dist/sdk/query/complete-list.js +1 -215
- package/dist/sdk/query/context.js +1 -1702
- package/dist/sdk/query/duplicate-candidates.js +1 -70
- package/dist/sdk/query/get.js +1 -450
- package/dist/sdk/query/history.js +1 -186
- package/dist/sdk/query/item-filter-options.js +1 -9
- package/dist/sdk/query/light-metadata.js +1 -18
- package/dist/sdk/query/list-filter-shared.js +1 -81
- package/dist/sdk/query/list.js +1 -1304
- package/dist/sdk/query/multi-value-filters.js +1 -78
- package/dist/sdk/query/next.js +1 -513
- package/dist/sdk/query/parsers.js +1 -44
- package/dist/sdk/query/projection-contracts.js +1 -184
- package/dist/sdk/query/search-contracts.js +1 -230
- package/dist/sdk/query/search-pagination.js +1 -35
- package/dist/sdk/query/search-rendering.js +1 -105
- package/dist/sdk/query/search.js +2 -1987
- package/dist/sdk/query.js +1 -35
- package/dist/sdk/read-output/continuation.js +1 -194
- package/dist/sdk/read-output-budget.js +1 -135
- package/dist/sdk/read-output-contracts.js +1 -1225
- package/dist/sdk/read-output-rows.js +1 -186
- package/dist/sdk/read-output-session.js +1 -208
- package/dist/sdk/relationship-analytics.js +1 -410
- package/dist/sdk/relationship-context.js +1 -284
- package/dist/sdk/relationship-history.js +4 -519
- package/dist/sdk/relationship-kinds/contract.js +1 -22
- package/dist/sdk/relationship-migration.js +1 -77
- package/dist/sdk/relationships.js +1 -579
- package/dist/sdk/reproducibility/process.js +1 -87
- package/dist/sdk/runtime-action-aliases.js +1 -59
- package/dist/sdk/runtime-extended-actions.js +1 -177
- package/dist/sdk/runtime-input.js +1 -614
- package/dist/sdk/runtime-primitives.js +1 -84
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.js +1 -1928
- package/dist/sdk/scheduling-shortcuts.js +1 -63
- package/dist/sdk/schema-migration.js +3 -856
- package/dist/sdk/schema.js +1 -1376
- package/dist/sdk/search-refresh-worker.js +1 -18
- package/dist/sdk/similarity-scoring.js +1 -53
- package/dist/sdk/similarity.js +1 -326
- package/dist/sdk/start-task-status.js +1 -14
- package/dist/sdk/stats.js +1 -270
- package/dist/sdk/structured-mutations.js +1 -580
- package/dist/sdk/telemetry-flush.js +1 -13
- package/dist/sdk/telemetry.js +1 -405
- package/dist/sdk/templates.js +2 -292
- package/dist/sdk/test/batch.js +2 -509
- package/dist/sdk/test/entry.js +1 -70
- package/dist/sdk/test/execution.js +6 -2211
- package/dist/sdk/test/linked-command-detection.js +1 -546
- package/dist/sdk/test/measurements.js +1 -91
- package/dist/sdk/test/parsers.js +1 -545
- package/dist/sdk/test/runs.js +1 -193
- package/dist/sdk/test/trust.js +2 -206
- package/dist/sdk/testing.js +4 -1391
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -32
- package/dist/sdk/traceability/source-traceability.js +1 -292
- package/dist/sdk/tracker-root-discovery.js +1 -9
- package/dist/sdk/workspace-contracts-cache.js +1 -28
- package/dist/sdk/workspace-contracts.js +1 -33
- package/dist/sdk/workspace-memory.js +2 -318
- package/dist/sdk/workspace-recipe.js +1 -71
- package/dist/sdk/workspace-snapshot.js +4 -613
- package/dist/sdk/workspace-transaction-gc.js +1 -149
- package/dist/sdk/workspace-transaction.js +2 -363
- package/dist/sdk/workspace.js +3 -127
- package/dist/types/index.js +1 -9
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +167 -0
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +9 -3
- package/docs/EXTENSIONS.md +1 -0
- package/docs/HISTORY_MAINTENANCE.md +125 -0
- package/docs/MCP_2026_07_28_CONFORMANCE.md +20 -10
- package/docs/PACKAGE_EVIDENCE.md +92 -0
- package/docs/PLANNING_MEASUREMENTS.md +183 -0
- package/docs/README.md +3 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +23 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -5
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +2 -2
- 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/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/scripts/finalize-build.mjs +45 -3
- package/dist/cli-bundle/chunks/chunk-AZDFJGH6.js +0 -9
- package/dist/cli-bundle/chunks/chunk-BAX2BYUW.js +0 -2111
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-OF76PSDQ.js +0 -5
- package/dist/cli-bundle/chunks/chunk-QUWFABDM.js +0 -232
- package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RWWBOWJ5.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WGAOYSYH.js +0 -40
- package/dist/cli-bundle/chunks/chunk-WI2AYPA7.js +0 -2
- package/dist/cli-bundle/chunks/register-list-query-5JL52D33.js +0 -11
- package/dist/cli-bundle/chunks/register-mutation-ZPG7KMVP.js +0 -20
- package/dist/cli-bundle/chunks/register-setup-H4SVAVX7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AL5ON6K6.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CHC2IDXA.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-CK6QFAPZ.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-EZR3GHFE.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-H2WJWK7L.js +0 -56
- package/dist/cli-bundle/focused-chunks/chunk-NTPY5GSO.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-P5O7MP5Y.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PDMW2E36.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-QTVCLMSZ.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-QTZRBUYA.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-SGQST3PQ.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-UKHASMMP.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-ZPEKQHOC.js +0 -2
|
@@ -1,331 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module sdk/lifecycle/restore
|
|
3
|
-
*
|
|
4
|
-
* Implements the SDK-owned restore lifecycle operation shared by every surface.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7a3effef-6ba8-51ba-ae99-436d4ef69813")}catch(e){}}();
|
|
8
|
-
import { assertInitializedTracker } from "../environment/tracker-preflight.js";
|
|
9
|
-
import jsonPatch from "fast-json-patch";
|
|
10
|
-
import fs from "node:fs/promises";
|
|
11
|
-
import { readLocatedItemSnapshot } from "../../core/store/item-store.js";
|
|
12
|
-
import { historyVersionOffset } from "../../core/history/version-address.js";
|
|
13
|
-
import { pathExists, readFileIfExists, writeFileAtomic, appendHistoryEntry, createHistoryEntry, replayToCanonicalItemDocument, replayToItemDocument, toReplayDocument, enforceHistoryStreamPolicyForItem, normalizeItemId, normalizeRawItemId, canonicalDocument, serializeItemDocument, resolveItemTypeRegistry, acquireLock, EXIT_CODE, PmCliError, nowIso, getActiveExtensionRegistrations, projectAfterCommandItemSnapshot, recordAfterCommandAffectedItem, runActiveOnWriteHooks, runActiveBeforeMutationHooks, locateItem, createMutationGuardSdk, getHistoryPath, getItemPath, resolvePmRoot, readSettings, resolveAuthor, } from "../runtime-primitives.js";
|
|
14
|
-
import { applyHistoryPatch, ensureMaterializedHistoryTarget as ensureMaterializedRestoreTarget, extractPatchFailureContext, readHistoryEntries, replayHistoryToTarget as replayToTarget, resolveHistoryTarget, } from "../history-read.js";
|
|
15
|
-
import { acquireItemMetadataDerivedIndexLock, refreshItemMetadataDerivedIndex, } from "../item-metadata-index.js";
|
|
16
|
-
/** Read a restore input without discarding unreadable bytes needed for rollback. */
|
|
17
|
-
async function readRestoreItem(located, settings, history) {
|
|
18
|
-
const snapshot = await readLocatedItemSnapshot(located, { schema: settings.schema });
|
|
19
|
-
return snapshot.error === null
|
|
20
|
-
? { raw: snapshot.raw, document: snapshot.document }
|
|
21
|
-
: { raw: snapshot.raw, document: replayCurrentDocument(history), recovered: true };
|
|
22
|
-
}
|
|
23
|
-
/** Resolve restore targets with the command's established wording and at-or-before timestamp semantics. */
|
|
24
|
-
function ensureReplayTarget(target, history) {
|
|
25
|
-
return resolveHistoryTarget(target, history, {
|
|
26
|
-
errorSubject: "restore",
|
|
27
|
-
allowFutureTimestamp: true,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
function replayCurrentDocument(history) {
|
|
31
|
-
const currentReplay = replayToTarget(history, history.length - 1);
|
|
32
|
-
if (Object.keys(currentReplay.metadata).length === 0) {
|
|
33
|
-
return {
|
|
34
|
-
metadata: {},
|
|
35
|
-
body: currentReplay.body,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
return canonicalDocument(replayToItemDocument(currentReplay));
|
|
39
|
-
}
|
|
40
|
-
async function resolveRestoreSubject(pmRoot, id, settings, typeToFolder) {
|
|
41
|
-
const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeToFolder);
|
|
42
|
-
if (located) {
|
|
43
|
-
const historyPath = getHistoryPath(pmRoot, located.id);
|
|
44
|
-
const historyPolicy = await enforceHistoryStreamPolicyForItem({
|
|
45
|
-
pmRoot,
|
|
46
|
-
settings,
|
|
47
|
-
itemId: located.id,
|
|
48
|
-
commandLabel: "restore",
|
|
49
|
-
});
|
|
50
|
-
return {
|
|
51
|
-
id: located.id,
|
|
52
|
-
historyPath,
|
|
53
|
-
located,
|
|
54
|
-
historyPolicyWarnings: historyPolicy.warnings,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
const normalizedId = normalizeItemId(id, settings.id_prefix);
|
|
58
|
-
const rawNormalizedId = normalizeRawItemId(id);
|
|
59
|
-
/* c8 ignore start -- raw-id fallback is covered by normalize-item-id utility tests. */
|
|
60
|
-
const candidateIds = normalizedId === rawNormalizedId
|
|
61
|
-
? [normalizedId]
|
|
62
|
-
: [normalizedId, rawNormalizedId];
|
|
63
|
-
/* c8 ignore stop */
|
|
64
|
-
for (const candidateId of candidateIds) {
|
|
65
|
-
const historyPath = getHistoryPath(pmRoot, candidateId);
|
|
66
|
-
if (await pathExists(historyPath)) {
|
|
67
|
-
return {
|
|
68
|
-
id: candidateId,
|
|
69
|
-
historyPath,
|
|
70
|
-
located: null,
|
|
71
|
-
historyPolicyWarnings: [],
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
|
|
76
|
-
}
|
|
77
|
-
function changedFields(beforeDocument, afterDocument) {
|
|
78
|
-
const beforeReplay = toReplayDocument(beforeDocument);
|
|
79
|
-
const afterReplay = toReplayDocument(afterDocument);
|
|
80
|
-
const patch = jsonPatch.compare(beforeReplay, afterReplay);
|
|
81
|
-
const fields = new Set();
|
|
82
|
-
for (const op of patch) {
|
|
83
|
-
if (op.path === "/body" || op.path.startsWith("/body/")) {
|
|
84
|
-
fields.add("body");
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
const segment = op.path
|
|
88
|
-
.replace(/^\/(?:metadata|front_matter)\/?/, "")
|
|
89
|
-
.split("/")[0];
|
|
90
|
-
fields.add(segment.replaceAll("~1", "/").replaceAll("~0", "~"));
|
|
91
|
-
}
|
|
92
|
-
return Array.from(fields).sort((a, b) => a.localeCompare(b));
|
|
93
|
-
}
|
|
94
|
-
/** Reload item and history under the caller's lock, refusing changes since the recovery snapshot. */
|
|
95
|
-
async function loadRestoreStateUnderLock(params) {
|
|
96
|
-
const historyRawUnderLock = await readFileIfExists(params.subject.historyPath);
|
|
97
|
-
if (historyRawUnderLock !== params.historyRawBeforeLock) {
|
|
98
|
-
throw new PmCliError(`History for ${params.resolvedId} changed while waiting for lock; retry restore.`, EXIT_CODE.CONFLICT);
|
|
99
|
-
}
|
|
100
|
-
const locatedUnderLock = await locateItem(params.pmRoot, params.resolvedId, params.settings.id_prefix, params.settings.item_format, params.typeToFolder);
|
|
101
|
-
const loadedItemUnderLock = locatedUnderLock
|
|
102
|
-
? await readRestoreItem(locatedUnderLock, params.settings, params.history)
|
|
103
|
-
: null;
|
|
104
|
-
if ((loadedItemUnderLock?.raw ?? null) !== params.currentItemRawBeforeLock) {
|
|
105
|
-
throw new PmCliError(`Item ${params.resolvedId} changed while waiting for lock; retry restore.`, EXIT_CODE.CONFLICT);
|
|
106
|
-
}
|
|
107
|
-
return {
|
|
108
|
-
loadedItemUnderLock,
|
|
109
|
-
existingItemPath: locatedUnderLock?.itemPath ?? null,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
function resolveRestoreCurrentState(loadedItemUnderLock, history) {
|
|
113
|
-
if (loadedItemUnderLock) {
|
|
114
|
-
return {
|
|
115
|
-
document: loadedItemUnderLock.document,
|
|
116
|
-
originalRaw: loadedItemUnderLock.raw,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
return { document: replayCurrentDocument(history), originalRaw: null };
|
|
120
|
-
}
|
|
121
|
-
function collectRestoreOwnershipWarnings(params) {
|
|
122
|
-
const assigned = params.document.metadata.assignee?.trim();
|
|
123
|
-
const hasOwnershipConflict = assigned && assigned !== params.author && !params.force;
|
|
124
|
-
if (!hasOwnershipConflict) {
|
|
125
|
-
return [];
|
|
126
|
-
}
|
|
127
|
-
if (params.enforcement === "strict") {
|
|
128
|
-
throw new PmCliError(`Item ${params.resolvedId} is assigned to ${assigned}. Use --force to override.`, EXIT_CODE.CONFLICT);
|
|
129
|
-
}
|
|
130
|
-
return params.enforcement === "warn"
|
|
131
|
-
? [`ownership_warning:assignee_conflict:${params.resolvedId}:${assigned}`]
|
|
132
|
-
: [];
|
|
133
|
-
}
|
|
134
|
-
async function restorePreviousItemAfterHistoryFailure(params) {
|
|
135
|
-
if (params.existingItemPath &&
|
|
136
|
-
params.resolvedOriginalRaw !== null &&
|
|
137
|
-
params.restoredItemPath !== params.existingItemPath) {
|
|
138
|
-
await writeFileAtomic(params.existingItemPath, params.resolvedOriginalRaw);
|
|
139
|
-
await fs.rm(params.restoredItemPath, { force: true });
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
if (params.existingItemPath && params.resolvedOriginalRaw !== null) {
|
|
143
|
-
await writeFileAtomic(params.existingItemPath, params.resolvedOriginalRaw);
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
await fs.rm(params.restoredItemPath, { force: true });
|
|
147
|
-
}
|
|
148
|
-
async function runRestoreWriteHooks(params) {
|
|
149
|
-
return [
|
|
150
|
-
...(await runActiveOnWriteHooks({
|
|
151
|
-
path: params.restoredItemPath,
|
|
152
|
-
scope: "project",
|
|
153
|
-
op: "restore",
|
|
154
|
-
item_id: params.after.metadata.id,
|
|
155
|
-
item_type: params.after.metadata.type,
|
|
156
|
-
before: params.before,
|
|
157
|
-
after: params.after,
|
|
158
|
-
changed_fields: ["restored"],
|
|
159
|
-
})),
|
|
160
|
-
...(await runActiveOnWriteHooks({
|
|
161
|
-
path: params.historyPath,
|
|
162
|
-
scope: "project",
|
|
163
|
-
op: "restore:history",
|
|
164
|
-
item_id: params.after.metadata.id,
|
|
165
|
-
item_type: params.after.metadata.type,
|
|
166
|
-
before: params.before,
|
|
167
|
-
after: params.after,
|
|
168
|
-
changed_fields: ["restored"],
|
|
169
|
-
})),
|
|
170
|
-
];
|
|
171
|
-
}
|
|
172
|
-
/** Implements run restore for the public runtime surface of this module. */
|
|
173
|
-
export async function runRestore(id, target, options, global) {
|
|
174
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
175
|
-
await assertInitializedTracker(pmRoot);
|
|
176
|
-
const settings = await readSettings(pmRoot);
|
|
177
|
-
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
178
|
-
const subject = await resolveRestoreSubject(pmRoot, id, settings, typeRegistry.type_to_folder);
|
|
179
|
-
const resolvedId = subject.id;
|
|
180
|
-
const historyRawBeforeLock = await readFileIfExists(subject.historyPath);
|
|
181
|
-
const history = await readHistoryEntries(subject.historyPath, resolvedId);
|
|
182
|
-
if (history.length === 0) {
|
|
183
|
-
throw new PmCliError(`No history exists for ${resolvedId}; restore is unavailable.`, EXIT_CODE.NOT_FOUND);
|
|
184
|
-
}
|
|
185
|
-
const resolvedTarget = ensureReplayTarget(target, history);
|
|
186
|
-
const replayDocument = ensureMaterializedRestoreTarget(replayToTarget(history, resolvedTarget.historyIndex), resolvedTarget);
|
|
187
|
-
const restoredDocument = replayToCanonicalItemDocument(replayDocument, {
|
|
188
|
-
schema: settings.schema,
|
|
189
|
-
});
|
|
190
|
-
if (restoredDocument.metadata.id !== resolvedId) {
|
|
191
|
-
throw new PmCliError(`Restore target resolved to item ${restoredDocument.metadata.id}, expected ${resolvedId}.`, EXIT_CODE.GENERIC_FAILURE);
|
|
192
|
-
}
|
|
193
|
-
const loadedItemBeforeLock = subject.located
|
|
194
|
-
? await readRestoreItem(subject.located, settings, history)
|
|
195
|
-
: null;
|
|
196
|
-
const currentItemRawBeforeLock = loadedItemBeforeLock?.raw ?? null;
|
|
197
|
-
const author = resolveAuthor(options.author, settings.author_default);
|
|
198
|
-
const releaseLock = await acquireLock(pmRoot, resolvedId, settings.locks.ttl_seconds, author, Boolean(options.force), settings.governance.force_required_for_stale_lock, settings.locks.wait_ms);
|
|
199
|
-
try {
|
|
200
|
-
const { loadedItemUnderLock, existingItemPath } = await loadRestoreStateUnderLock({
|
|
201
|
-
pmRoot,
|
|
202
|
-
resolvedId,
|
|
203
|
-
subject,
|
|
204
|
-
settings,
|
|
205
|
-
typeToFolder: typeRegistry.type_to_folder,
|
|
206
|
-
historyRawBeforeLock,
|
|
207
|
-
currentItemRawBeforeLock,
|
|
208
|
-
history,
|
|
209
|
-
});
|
|
210
|
-
const itemFormat = "toon";
|
|
211
|
-
const currentState = resolveRestoreCurrentState(loadedItemUnderLock, history);
|
|
212
|
-
const ownershipWarnings = collectRestoreOwnershipWarnings({
|
|
213
|
-
document: currentState.document,
|
|
214
|
-
author,
|
|
215
|
-
force: options.force,
|
|
216
|
-
enforcement: settings.governance.ownership_enforcement,
|
|
217
|
-
resolvedId,
|
|
218
|
-
});
|
|
219
|
-
const restoreChangedFields = changedFields(currentState.document, restoredDocument);
|
|
220
|
-
await runActiveBeforeMutationHooks({
|
|
221
|
-
pm_root: pmRoot,
|
|
222
|
-
operation: "restore",
|
|
223
|
-
before: currentState.document,
|
|
224
|
-
after: restoredDocument,
|
|
225
|
-
changed_fields: restoreChangedFields,
|
|
226
|
-
sdk: createMutationGuardSdk({
|
|
227
|
-
pmRoot,
|
|
228
|
-
settings,
|
|
229
|
-
typeToFolder: typeRegistry.type_to_folder,
|
|
230
|
-
}),
|
|
231
|
-
});
|
|
232
|
-
const serializedRestore = serializeItemDocument(restoredDocument, {
|
|
233
|
-
format: itemFormat,
|
|
234
|
-
schema: settings.schema,
|
|
235
|
-
});
|
|
236
|
-
/* c8 ignore next -- restored item path typing is exercised in restore integration workflows. */
|
|
237
|
-
const restoredItemPath = getItemPath(pmRoot, restoredDocument.metadata.type, resolvedId, itemFormat, typeRegistry.type_to_folder);
|
|
238
|
-
const releaseDerivedIndexLock = await acquireItemMetadataDerivedIndexLock(pmRoot, author);
|
|
239
|
-
let derivedIndexWarnings = [];
|
|
240
|
-
try {
|
|
241
|
-
await writeFileAtomic(restoredItemPath, serializedRestore);
|
|
242
|
-
if (existingItemPath && restoredItemPath !== existingItemPath) {
|
|
243
|
-
await fs.rm(existingItemPath);
|
|
244
|
-
}
|
|
245
|
-
const historyEntry = createHistoryEntry({
|
|
246
|
-
nowIso: nowIso(),
|
|
247
|
-
author,
|
|
248
|
-
op: "restore",
|
|
249
|
-
before: currentState.document,
|
|
250
|
-
after: restoredDocument,
|
|
251
|
-
message: options.message,
|
|
252
|
-
});
|
|
253
|
-
try {
|
|
254
|
-
await appendHistoryEntry(subject.historyPath, historyEntry);
|
|
255
|
-
}
|
|
256
|
-
catch (error) {
|
|
257
|
-
await restorePreviousItemAfterHistoryFailure({
|
|
258
|
-
existingItemPath,
|
|
259
|
-
resolvedOriginalRaw: currentState.originalRaw,
|
|
260
|
-
restoredItemPath,
|
|
261
|
-
});
|
|
262
|
-
throw error;
|
|
263
|
-
}
|
|
264
|
-
derivedIndexWarnings = await refreshItemMetadataDerivedIndex({
|
|
265
|
-
pmRoot,
|
|
266
|
-
preferredFormat: settings.item_format,
|
|
267
|
-
typeToFolder: typeRegistry.type_to_folder,
|
|
268
|
-
schema: settings.schema,
|
|
269
|
-
itemPath: restoredItemPath,
|
|
270
|
-
previousItemPath: existingItemPath ?? undefined,
|
|
271
|
-
document: restoredDocument,
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
finally {
|
|
275
|
-
await releaseDerivedIndexLock();
|
|
276
|
-
}
|
|
277
|
-
const hookWarnings = await runRestoreWriteHooks({
|
|
278
|
-
restoredItemPath,
|
|
279
|
-
historyPath: subject.historyPath,
|
|
280
|
-
before: currentState.document,
|
|
281
|
-
after: restoredDocument,
|
|
282
|
-
});
|
|
283
|
-
recordAfterCommandAffectedItem({
|
|
284
|
-
id: restoredDocument.metadata.id,
|
|
285
|
-
op: "restore",
|
|
286
|
-
item_type: restoredDocument.metadata.type,
|
|
287
|
-
previous_status: currentState.document.metadata.status,
|
|
288
|
-
status: restoredDocument.metadata.status,
|
|
289
|
-
previous: projectAfterCommandItemSnapshot(currentState.document.metadata, restoreChangedFields),
|
|
290
|
-
current: projectAfterCommandItemSnapshot(restoredDocument.metadata, restoreChangedFields),
|
|
291
|
-
changed_fields: restoreChangedFields,
|
|
292
|
-
});
|
|
293
|
-
const targetEntry = history[resolvedTarget.historyIndex];
|
|
294
|
-
const offset = historyVersionOffset(history, true);
|
|
295
|
-
return {
|
|
296
|
-
item: restoredDocument.metadata,
|
|
297
|
-
restored_from: {
|
|
298
|
-
kind: resolvedTarget.kind,
|
|
299
|
-
target: resolvedTarget.raw,
|
|
300
|
-
history_index: resolvedTarget.historyIndex + 1,
|
|
301
|
-
version: offset === null ? null : offset + resolvedTarget.historyIndex + 1,
|
|
302
|
-
entry_ts: targetEntry.ts,
|
|
303
|
-
entry_op: targetEntry.op,
|
|
304
|
-
},
|
|
305
|
-
changed_fields: restoreChangedFields,
|
|
306
|
-
warnings: [
|
|
307
|
-
...(loadedItemUnderLock?.recovered ? ["restore_unreadable_item_recovered"] : []),
|
|
308
|
-
...subject.historyPolicyWarnings,
|
|
309
|
-
...ownershipWarnings,
|
|
310
|
-
...derivedIndexWarnings,
|
|
311
|
-
...hookWarnings,
|
|
312
|
-
],
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
finally {
|
|
316
|
-
await releaseLock();
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
/** Public contract for test only restore command, shared by SDK and presentation-layer consumers. */
|
|
320
|
-
export const _testOnlyRestoreCommand = {
|
|
321
|
-
applyHistoryPatch,
|
|
322
|
-
changedFields,
|
|
323
|
-
ensureMaterializedRestoreTarget,
|
|
324
|
-
ensureReplayTarget,
|
|
325
|
-
extractPatchFailureContext,
|
|
326
|
-
replayCurrentDocument,
|
|
327
|
-
replayToTarget,
|
|
328
|
-
resolveRestoreSubject,
|
|
329
|
-
};
|
|
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]="0f22715f-cfb9-5c75-b4c5-e9719416c2b9")}catch(e2){}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import jsonPatch from"fast-json-patch";import fs from"node:fs/promises";import{readLocatedItemSnapshot}from"../../core/store/item-store.js";import{readHistorySnapshot}from"../../core/history/read.js";import{verifyHistoryRewriteNoDrift}from"../../core/history/history-rewrite.js";import{resolveHistorySubject}from"../history/subject.js";import{historyVersionOffset}from"../../core/history/version-address.js";import{writeFileAtomic,appendHistoryEntry,createHistoryEntry,replayToCanonicalItemDocument,replayToItemDocument,toReplayDocument,enforceHistoryStreamPolicyForItem,canonicalDocument,serializeItemDocument,resolveItemTypeRegistry,acquireLock,EXIT_CODE,PmCliError,nowIso,getActiveExtensionRegistrations,projectAfterCommandItemSnapshot,recordAfterCommandAffectedItem,runActiveOnWriteHooks,runActiveBeforeMutationHooks,createMutationGuardSdk,getItemPath,resolvePmRoot,readSettings,resolveAuthor}from"../runtime-primitives.js";import{applyHistoryPatch,ensureMaterializedHistoryTarget as ensureMaterializedRestoreTarget,extractPatchFailureContext,replayHistoryToTarget as replayToTarget,resolveHistoryTarget}from"../history-read.js";import{acquireItemMetadataDerivedIndexLock,refreshItemMetadataDerivedIndex}from"../item-metadata-index.js";async function readRestoreItem(located,settings,history){const snapshot=await readLocatedItemSnapshot(located,{schema:settings.schema});return snapshot.error===null?{raw:snapshot.raw,document:snapshot.document}:{raw:snapshot.raw,document:replayCurrentDocument(history),recovered:true}}function ensureReplayTarget(target,history){return resolveHistoryTarget(target,history,{errorSubject:"restore",allowFutureTimestamp:true})}function replayCurrentDocument(history){const currentReplay=replayToTarget(history,history.length-1);if(Object.keys(currentReplay.metadata).length===0){return{metadata:{},body:currentReplay.body}}return canonicalDocument(replayToItemDocument(currentReplay))}async function resolveRestoreSubject(pmRoot,id,settings,typeToFolder){const subject=await resolveHistorySubject(pmRoot,id,settings,typeToFolder);const historyPolicy=subject.located?await enforceHistoryStreamPolicyForItem({pmRoot,settings,itemId:subject.id,commandLabel:"restore"}):{warnings:[]};return{...subject,historyPolicyWarnings:historyPolicy.warnings}}function changedFields(beforeDocument,afterDocument){const beforeReplay=toReplayDocument(beforeDocument);const afterReplay=toReplayDocument(afterDocument);const patch=jsonPatch.compare(beforeReplay,afterReplay);const fields=new Set;for(const op of patch){if(op.path==="/body"||op.path.startsWith("/body/")){fields.add("body");continue}const segment=op.path.replace(/^\/(?:metadata|front_matter)\/?/,"").split("/")[0];fields.add(segment.replaceAll("~1","/").replaceAll("~0","~"))}return Array.from(fields).sort((a,b)=>a.localeCompare(b))}async function loadRestoreStateUnderLock(params){const verified=await verifyHistoryRewriteNoDrift({pmRoot:params.pmRoot,subject:params.subject,settings:params.settings,typeRegistry:params.typeRegistry,historyRawBeforeLock:params.historyRawBeforeLock,currentItemRawBeforeLock:params.currentItemRawBeforeLock,operation:"restore",readItem:located=>readRestoreItem(located,params.settings,params.history)});return{loadedItemUnderLock:verified.loadedItemUnderLock,existingItemPath:verified.locatedUnderLock?.itemPath??null}}function resolveRestoreCurrentState(loadedItemUnderLock,history){if(loadedItemUnderLock){return{document:loadedItemUnderLock.document,originalRaw:loadedItemUnderLock.raw}}return{document:replayCurrentDocument(history),originalRaw:null}}function collectRestoreOwnershipWarnings(params){const assigned=params.document.metadata.assignee?.trim();const hasOwnershipConflict=assigned&&assigned!==params.author&&!params.force;if(!hasOwnershipConflict){return[]}if(params.enforcement==="strict"){throw new PmCliError(`Item ${params.resolvedId} is assigned to ${assigned}. Use --force to override.`,EXIT_CODE.CONFLICT)}return params.enforcement==="warn"?[`ownership_warning:assignee_conflict:${params.resolvedId}:${assigned}`]:[]}async function restorePreviousItemAfterHistoryFailure(params){if(params.existingItemPath&¶ms.resolvedOriginalRaw!==null&¶ms.restoredItemPath!==params.existingItemPath){await writeFileAtomic(params.existingItemPath,params.resolvedOriginalRaw);await fs.rm(params.restoredItemPath,{force:true});return}if(params.existingItemPath&¶ms.resolvedOriginalRaw!==null){await writeFileAtomic(params.existingItemPath,params.resolvedOriginalRaw);return}await fs.rm(params.restoredItemPath,{force:true})}async function runRestoreWriteHooks(params){return[...await runActiveOnWriteHooks({path:params.restoredItemPath,scope:"project",op:"restore",item_id:params.after.metadata.id,item_type:params.after.metadata.type,before:params.before,after:params.after,changed_fields:["restored"]}),...await runActiveOnWriteHooks({path:params.historyPath,scope:"project",op:"restore:history",item_id:params.after.metadata.id,item_type:params.after.metadata.type,before:params.before,after:params.after,changed_fields:["restored"]})]}async function runRestore(id,target,options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot);const typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations());const subject=await resolveRestoreSubject(pmRoot,id,settings,typeRegistry.type_to_folder);const resolvedId=subject.id;const{raw:historyRawBeforeLock,entries:history}=await readHistorySnapshot(subject.historyPath,resolvedId);if(history.length===0){throw new PmCliError(`No history exists for ${resolvedId}; restore is unavailable.`,EXIT_CODE.NOT_FOUND)}const resolvedTarget=ensureReplayTarget(target,history);const replayDocument=ensureMaterializedRestoreTarget(replayToTarget(history,resolvedTarget.historyIndex),resolvedTarget);const restoredDocument=replayToCanonicalItemDocument(replayDocument,{schema:settings.schema});if(restoredDocument.metadata.id!==resolvedId){throw new PmCliError(`Restore target resolved to item ${restoredDocument.metadata.id}, expected ${resolvedId}.`,EXIT_CODE.GENERIC_FAILURE)}const loadedItemBeforeLock=subject.located?await readRestoreItem(subject.located,settings,history):null;const currentItemRawBeforeLock=loadedItemBeforeLock?.raw??null;const author=resolveAuthor(options.author,settings.author_default);const releaseLock=await acquireLock(pmRoot,resolvedId,settings.locks.ttl_seconds,author,Boolean(options.force),settings.governance.force_required_for_stale_lock,settings.locks.wait_ms);try{const{loadedItemUnderLock,existingItemPath}=await loadRestoreStateUnderLock({pmRoot,subject,settings,typeRegistry,historyRawBeforeLock,currentItemRawBeforeLock,history});const itemFormat="toon";const currentState=resolveRestoreCurrentState(loadedItemUnderLock,history);const ownershipWarnings=collectRestoreOwnershipWarnings({document:currentState.document,author,force:options.force,enforcement:settings.governance.ownership_enforcement,resolvedId});const restoreChangedFields=changedFields(currentState.document,restoredDocument);await runActiveBeforeMutationHooks({pm_root:pmRoot,operation:"restore",before:currentState.document,after:restoredDocument,changed_fields:restoreChangedFields,sdk:createMutationGuardSdk({pmRoot,settings,typeToFolder:typeRegistry.type_to_folder})});const serializedRestore=serializeItemDocument(restoredDocument,{format:itemFormat,schema:settings.schema});const restoredItemPath=getItemPath(pmRoot,restoredDocument.metadata.type,resolvedId,itemFormat,typeRegistry.type_to_folder);const releaseDerivedIndexLock=await acquireItemMetadataDerivedIndexLock(pmRoot,author);let derivedIndexWarnings=[];try{await writeFileAtomic(restoredItemPath,serializedRestore);if(existingItemPath&&restoredItemPath!==existingItemPath){await fs.rm(existingItemPath)}const historyEntry=createHistoryEntry({nowIso:nowIso(),author,op:"restore",before:currentState.document,after:restoredDocument,message:options.message});try{await appendHistoryEntry(subject.historyPath,historyEntry)}catch(error){await restorePreviousItemAfterHistoryFailure({existingItemPath,resolvedOriginalRaw:currentState.originalRaw,restoredItemPath});throw error}derivedIndexWarnings=await refreshItemMetadataDerivedIndex({pmRoot,preferredFormat:settings.item_format,typeToFolder:typeRegistry.type_to_folder,schema:settings.schema,itemPath:restoredItemPath,previousItemPath:existingItemPath??void 0,document:restoredDocument})}finally{await releaseDerivedIndexLock()}const hookWarnings=await runRestoreWriteHooks({restoredItemPath,historyPath:subject.historyPath,before:currentState.document,after:restoredDocument});recordAfterCommandAffectedItem({id:restoredDocument.metadata.id,op:"restore",item_type:restoredDocument.metadata.type,previous_status:currentState.document.metadata.status,status:restoredDocument.metadata.status,previous:projectAfterCommandItemSnapshot(currentState.document.metadata,restoreChangedFields),current:projectAfterCommandItemSnapshot(restoredDocument.metadata,restoreChangedFields),changed_fields:restoreChangedFields});const targetEntry=history[resolvedTarget.historyIndex];const offset=historyVersionOffset(history,true);return{item:restoredDocument.metadata,restored_from:{kind:resolvedTarget.kind,target:resolvedTarget.raw,history_index:resolvedTarget.historyIndex+1,version:offset===null?null:offset+resolvedTarget.historyIndex+1,entry_ts:targetEntry.ts,entry_op:targetEntry.op},changed_fields:restoreChangedFields,warnings:[...loadedItemUnderLock?.recovered?["restore_unreadable_item_recovered"]:[],...subject.historyPolicyWarnings,...ownershipWarnings,...derivedIndexWarnings,...hookWarnings]}}finally{await releaseLock()}}const _testOnlyRestoreCommand={applyHistoryPatch,changedFields,ensureMaterializedRestoreTarget,ensureReplayTarget,extractPatchFailureContext,replayCurrentDocument,replayToTarget,resolveRestoreSubject};export{_testOnlyRestoreCommand,runRestore};
|
|
330
2
|
//# sourceMappingURL=restore.js.map
|
|
331
|
-
//# debugId=7a3effef-6ba8-51ba-ae99-436d4ef69813
|
|
@@ -1,296 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/lifecycle/shared-unset-fields
|
|
3
|
-
*
|
|
4
|
-
* Single-sources unset-field metadata shared by create and update command handlers.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0062e981-158a-5e6a-b028-6c7cef0f59ba")}catch(e){}}();
|
|
8
|
-
import { EXIT_CODE, PmCliError, } from "../runtime-primitives.js";
|
|
9
|
-
import { isLegacyNoneToken } from "./legacy-none-tokens.js";
|
|
10
|
-
/** Public contract for common unset field definitions before close reason, shared by SDK and presentation-layer consumers. */
|
|
11
|
-
export const COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON = [
|
|
12
|
-
{
|
|
13
|
-
canonical: "tags",
|
|
14
|
-
aliases: ["tags"],
|
|
15
|
-
optionKey: "tags",
|
|
16
|
-
metadataKey: "tags",
|
|
17
|
-
},
|
|
18
|
-
];
|
|
19
|
-
/** Public contract for common unset field definitions after close reason before author, shared by SDK and presentation-layer consumers. */
|
|
20
|
-
export const COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR = [
|
|
21
|
-
{
|
|
22
|
-
canonical: "deadline",
|
|
23
|
-
aliases: ["deadline"],
|
|
24
|
-
optionKey: "deadline",
|
|
25
|
-
metadataKey: "deadline",
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
canonical: "estimate",
|
|
29
|
-
aliases: ["estimate", "estimated_minutes", "estimated-minutes"],
|
|
30
|
-
optionKey: "estimatedMinutes",
|
|
31
|
-
metadataKey: "estimated_minutes",
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
canonical: "acceptance-criteria",
|
|
35
|
-
aliases: ["acceptance_criteria", "acceptance-criteria", "ac"],
|
|
36
|
-
optionKey: "acceptanceCriteria",
|
|
37
|
-
metadataKey: "acceptance_criteria",
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
canonical: "definition-of-ready",
|
|
41
|
-
aliases: ["definition_of_ready", "definition-of-ready"],
|
|
42
|
-
optionKey: "definitionOfReady",
|
|
43
|
-
metadataKey: "definition_of_ready",
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
canonical: "order",
|
|
47
|
-
aliases: ["order", "rank"],
|
|
48
|
-
optionKey: "order",
|
|
49
|
-
metadataKey: "order",
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
canonical: "goal",
|
|
53
|
-
aliases: ["goal"],
|
|
54
|
-
optionKey: "goal",
|
|
55
|
-
metadataKey: "goal",
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
canonical: "objective",
|
|
59
|
-
aliases: ["objective"],
|
|
60
|
-
optionKey: "objective",
|
|
61
|
-
metadataKey: "objective",
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
canonical: "value",
|
|
65
|
-
aliases: ["value"],
|
|
66
|
-
optionKey: "value",
|
|
67
|
-
metadataKey: "value",
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
canonical: "impact",
|
|
71
|
-
aliases: ["impact"],
|
|
72
|
-
optionKey: "impact",
|
|
73
|
-
metadataKey: "impact",
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
canonical: "outcome",
|
|
77
|
-
aliases: ["outcome"],
|
|
78
|
-
optionKey: "outcome",
|
|
79
|
-
metadataKey: "outcome",
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
canonical: "why-now",
|
|
83
|
-
aliases: ["why_now", "why-now"],
|
|
84
|
-
optionKey: "whyNow",
|
|
85
|
-
metadataKey: "why_now",
|
|
86
|
-
},
|
|
87
|
-
];
|
|
88
|
-
/** Public contract for common unset field definitions before author, shared by SDK and presentation-layer consumers. */
|
|
89
|
-
export const COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR = [
|
|
90
|
-
...COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON,
|
|
91
|
-
...COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR,
|
|
92
|
-
];
|
|
93
|
-
/** Public contract for common unset field definitions after author, shared by SDK and presentation-layer consumers. */
|
|
94
|
-
export const COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR = [
|
|
95
|
-
{
|
|
96
|
-
canonical: "assignee",
|
|
97
|
-
aliases: ["assignee"],
|
|
98
|
-
optionKey: "assignee",
|
|
99
|
-
metadataKey: "assignee",
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
canonical: "parent",
|
|
103
|
-
aliases: ["parent"],
|
|
104
|
-
optionKey: "parent",
|
|
105
|
-
metadataKey: "parent",
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
canonical: "reviewer",
|
|
109
|
-
aliases: ["reviewer"],
|
|
110
|
-
optionKey: "reviewer",
|
|
111
|
-
metadataKey: "reviewer",
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
canonical: "risk",
|
|
115
|
-
aliases: ["risk"],
|
|
116
|
-
optionKey: "risk",
|
|
117
|
-
metadataKey: "risk",
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
canonical: "confidence",
|
|
121
|
-
aliases: ["confidence"],
|
|
122
|
-
optionKey: "confidence",
|
|
123
|
-
metadataKey: "confidence",
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
canonical: "sprint",
|
|
127
|
-
aliases: ["sprint"],
|
|
128
|
-
optionKey: "sprint",
|
|
129
|
-
metadataKey: "sprint",
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
canonical: "release",
|
|
133
|
-
aliases: ["release"],
|
|
134
|
-
optionKey: "release",
|
|
135
|
-
metadataKey: "release",
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
canonical: "blocked-by",
|
|
139
|
-
aliases: ["blocked_by", "blocked-by"],
|
|
140
|
-
optionKey: "blockedBy",
|
|
141
|
-
metadataKey: "blocked_by",
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
canonical: "blocked-reason",
|
|
145
|
-
aliases: ["blocked_reason", "blocked-reason"],
|
|
146
|
-
optionKey: "blockedReason",
|
|
147
|
-
metadataKey: "blocked_reason",
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
canonical: "unblock-note",
|
|
151
|
-
aliases: ["unblock_note", "unblock-note"],
|
|
152
|
-
optionKey: "unblockNote",
|
|
153
|
-
metadataKey: "unblock_note",
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
canonical: "reporter",
|
|
157
|
-
aliases: ["reporter"],
|
|
158
|
-
optionKey: "reporter",
|
|
159
|
-
metadataKey: "reporter",
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
canonical: "severity",
|
|
163
|
-
aliases: ["severity"],
|
|
164
|
-
optionKey: "severity",
|
|
165
|
-
metadataKey: "severity",
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
canonical: "environment",
|
|
169
|
-
aliases: ["environment"],
|
|
170
|
-
optionKey: "environment",
|
|
171
|
-
metadataKey: "environment",
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
canonical: "repro-steps",
|
|
175
|
-
aliases: ["repro_steps", "repro-steps"],
|
|
176
|
-
optionKey: "reproSteps",
|
|
177
|
-
metadataKey: "repro_steps",
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
canonical: "resolution",
|
|
181
|
-
aliases: ["resolution"],
|
|
182
|
-
optionKey: "resolution",
|
|
183
|
-
metadataKey: "resolution",
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
canonical: "expected-result",
|
|
187
|
-
aliases: ["expected_result", "expected-result"],
|
|
188
|
-
optionKey: "expectedResult",
|
|
189
|
-
metadataKey: "expected_result",
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
canonical: "actual-result",
|
|
193
|
-
aliases: ["actual_result", "actual-result"],
|
|
194
|
-
optionKey: "actualResult",
|
|
195
|
-
metadataKey: "actual_result",
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
canonical: "affected-version",
|
|
199
|
-
aliases: ["affected_version", "affected-version"],
|
|
200
|
-
optionKey: "affectedVersion",
|
|
201
|
-
metadataKey: "affected_version",
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
canonical: "fixed-version",
|
|
205
|
-
aliases: ["fixed_version", "fixed-version"],
|
|
206
|
-
optionKey: "fixedVersion",
|
|
207
|
-
metadataKey: "fixed_version",
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
canonical: "component",
|
|
211
|
-
aliases: ["component"],
|
|
212
|
-
optionKey: "component",
|
|
213
|
-
metadataKey: "component",
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
canonical: "regression",
|
|
217
|
-
aliases: ["regression"],
|
|
218
|
-
optionKey: "regression",
|
|
219
|
-
metadataKey: "regression",
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
canonical: "customer-impact",
|
|
223
|
-
aliases: ["customer_impact", "customer-impact"],
|
|
224
|
-
optionKey: "customerImpact",
|
|
225
|
-
metadataKey: "customer_impact",
|
|
226
|
-
},
|
|
227
|
-
];
|
|
228
|
-
/** Parse and validate common command `--unset` tokens while preserving command-specific field resolution. */
|
|
229
|
-
export function parseCommandUnsetTargets(options) {
|
|
230
|
-
const metadataKeys = new Set();
|
|
231
|
-
const optionKeys = new Set();
|
|
232
|
-
if (!options.raw || options.raw.length === 0) {
|
|
233
|
-
return { metadataKeys, optionKeys };
|
|
234
|
-
}
|
|
235
|
-
for (const entry of options.raw) {
|
|
236
|
-
const trimmed = entry.trim().toLowerCase();
|
|
237
|
-
if (!trimmed) {
|
|
238
|
-
throw new PmCliError("--unset values must not be empty", EXIT_CODE.USAGE);
|
|
239
|
-
}
|
|
240
|
-
if (isLegacyNoneToken(trimmed)) {
|
|
241
|
-
throw new PmCliError('--unset no longer accepts "none" or "null". Specify concrete field names such as --unset deadline', EXIT_CODE.USAGE);
|
|
242
|
-
}
|
|
243
|
-
const definition = options.resolveDefinition(trimmed);
|
|
244
|
-
if (!definition) {
|
|
245
|
-
throw new PmCliError(`Unsupported --unset field "${entry}". Supported fields: ${options.supportedFields}`, EXIT_CODE.USAGE);
|
|
246
|
-
}
|
|
247
|
-
metadataKeys.add(definition.metadataKey);
|
|
248
|
-
optionKeys.add(definition.optionKey);
|
|
249
|
-
}
|
|
250
|
-
return { metadataKeys, optionKeys };
|
|
251
|
-
}
|
|
252
|
-
/** Resolve a runtime-schema field definition from a command `--unset` token. */
|
|
253
|
-
export function resolveRuntimeUnsetFieldDefinition(token, command, runtimeFieldRegistry) {
|
|
254
|
-
const normalizedToken = token.trim().toLowerCase();
|
|
255
|
-
if (!runtimeFieldRegistry) {
|
|
256
|
-
return undefined;
|
|
257
|
-
}
|
|
258
|
-
const definitions = runtimeFieldRegistry.command_to_fields?.get(command) ?? [];
|
|
259
|
-
for (const definition of definitions) {
|
|
260
|
-
if (definition.allow_unset === false) {
|
|
261
|
-
continue;
|
|
262
|
-
}
|
|
263
|
-
const candidates = new Set();
|
|
264
|
-
if (typeof definition.key === "string" && definition.key.length > 0) {
|
|
265
|
-
candidates.add(definition.key.toLowerCase());
|
|
266
|
-
}
|
|
267
|
-
if (typeof definition.metadata_key === "string" &&
|
|
268
|
-
definition.metadata_key.length > 0) {
|
|
269
|
-
candidates.add(definition.metadata_key.toLowerCase());
|
|
270
|
-
}
|
|
271
|
-
if (typeof definition.cli_flag === "string" &&
|
|
272
|
-
definition.cli_flag.length > 0) {
|
|
273
|
-
candidates.add(definition.cli_flag.replaceAll("-", "_").toLowerCase());
|
|
274
|
-
candidates.add(definition.cli_flag.toLowerCase());
|
|
275
|
-
}
|
|
276
|
-
if (Array.isArray(definition.cli_aliases)) {
|
|
277
|
-
for (const alias of definition.cli_aliases) {
|
|
278
|
-
if (typeof alias !== "string" || alias.length === 0) {
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
candidates.add(alias.replaceAll("-", "_").toLowerCase());
|
|
282
|
-
candidates.add(alias.toLowerCase());
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
if (!candidates.has(normalizedToken)) {
|
|
286
|
-
continue;
|
|
287
|
-
}
|
|
288
|
-
return {
|
|
289
|
-
optionKey: definition.key,
|
|
290
|
-
metadataKey: definition.metadata_key,
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
return undefined;
|
|
294
|
-
}
|
|
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]="0562fd00-217b-5e1f-8004-df4574f8b796")}catch(e2){}})();import{EXIT_CODE,PmCliError}from"../runtime-primitives.js";import{isLegacyNoneToken}from"./legacy-none-tokens.js";const COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON=[{canonical:"tags",aliases:["tags"],optionKey:"tags",metadataKey:"tags"}];const COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR=[{canonical:"deadline",aliases:["deadline"],optionKey:"deadline",metadataKey:"deadline"},{canonical:"estimate",aliases:["estimate","estimated_minutes","estimated-minutes"],optionKey:"estimatedMinutes",metadataKey:"estimated_minutes"},{canonical:"acceptance-criteria",aliases:["acceptance_criteria","acceptance-criteria","ac"],optionKey:"acceptanceCriteria",metadataKey:"acceptance_criteria"},{canonical:"definition-of-ready",aliases:["definition_of_ready","definition-of-ready"],optionKey:"definitionOfReady",metadataKey:"definition_of_ready"},{canonical:"order",aliases:["order","rank"],optionKey:"order",metadataKey:"order"},{canonical:"goal",aliases:["goal"],optionKey:"goal",metadataKey:"goal"},{canonical:"objective",aliases:["objective"],optionKey:"objective",metadataKey:"objective"},{canonical:"value",aliases:["value"],optionKey:"value",metadataKey:"value"},{canonical:"impact",aliases:["impact"],optionKey:"impact",metadataKey:"impact"},{canonical:"outcome",aliases:["outcome"],optionKey:"outcome",metadataKey:"outcome"},{canonical:"why-now",aliases:["why_now","why-now"],optionKey:"whyNow",metadataKey:"why_now"}];const COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR=[...COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON,...COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR];const COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR=[{canonical:"assignee",aliases:["assignee"],optionKey:"assignee",metadataKey:"assignee"},{canonical:"parent",aliases:["parent"],optionKey:"parent",metadataKey:"parent"},{canonical:"reviewer",aliases:["reviewer"],optionKey:"reviewer",metadataKey:"reviewer"},{canonical:"risk",aliases:["risk"],optionKey:"risk",metadataKey:"risk"},{canonical:"confidence",aliases:["confidence"],optionKey:"confidence",metadataKey:"confidence"},{canonical:"sprint",aliases:["sprint"],optionKey:"sprint",metadataKey:"sprint"},{canonical:"release",aliases:["release"],optionKey:"release",metadataKey:"release"},{canonical:"blocked-by",aliases:["blocked_by","blocked-by"],optionKey:"blockedBy",metadataKey:"blocked_by"},{canonical:"blocked-reason",aliases:["blocked_reason","blocked-reason"],optionKey:"blockedReason",metadataKey:"blocked_reason"},{canonical:"unblock-note",aliases:["unblock_note","unblock-note"],optionKey:"unblockNote",metadataKey:"unblock_note"},{canonical:"reporter",aliases:["reporter"],optionKey:"reporter",metadataKey:"reporter"},{canonical:"severity",aliases:["severity"],optionKey:"severity",metadataKey:"severity"},{canonical:"environment",aliases:["environment"],optionKey:"environment",metadataKey:"environment"},{canonical:"repro-steps",aliases:["repro_steps","repro-steps"],optionKey:"reproSteps",metadataKey:"repro_steps"},{canonical:"resolution",aliases:["resolution"],optionKey:"resolution",metadataKey:"resolution"},{canonical:"expected-result",aliases:["expected_result","expected-result"],optionKey:"expectedResult",metadataKey:"expected_result"},{canonical:"actual-result",aliases:["actual_result","actual-result"],optionKey:"actualResult",metadataKey:"actual_result"},{canonical:"affected-version",aliases:["affected_version","affected-version"],optionKey:"affectedVersion",metadataKey:"affected_version"},{canonical:"fixed-version",aliases:["fixed_version","fixed-version"],optionKey:"fixedVersion",metadataKey:"fixed_version"},{canonical:"component",aliases:["component"],optionKey:"component",metadataKey:"component"},{canonical:"regression",aliases:["regression"],optionKey:"regression",metadataKey:"regression"},{canonical:"customer-impact",aliases:["customer_impact","customer-impact"],optionKey:"customerImpact",metadataKey:"customer_impact"}];function parseCommandUnsetTargets(options){const metadataKeys=new Set;const optionKeys=new Set;if(!options.raw||options.raw.length===0){return{metadataKeys,optionKeys}}for(const entry of options.raw){const trimmed=entry.trim().toLowerCase();if(!trimmed){throw new PmCliError("--unset values must not be empty",EXIT_CODE.USAGE)}if(isLegacyNoneToken(trimmed)){throw new PmCliError('--unset no longer accepts "none" or "null". Specify concrete field names such as --unset deadline',EXIT_CODE.USAGE)}const definition=options.resolveDefinition(trimmed);if(!definition){throw new PmCliError(`Unsupported --unset field "${entry}". Supported fields: ${options.supportedFields}`,EXIT_CODE.USAGE)}metadataKeys.add(definition.metadataKey);optionKeys.add(definition.optionKey)}return{metadataKeys,optionKeys}}function resolveRuntimeUnsetFieldDefinition(token,command,runtimeFieldRegistry){const normalizedToken=token.trim().toLowerCase();if(!runtimeFieldRegistry){return void 0}const definitions=runtimeFieldRegistry.command_to_fields?.get(command)??[];for(const definition of definitions){if(definition.allow_unset===false){continue}const candidates=new Set;if(typeof definition.key==="string"&&definition.key.length>0){candidates.add(definition.key.toLowerCase())}if(typeof definition.metadata_key==="string"&&definition.metadata_key.length>0){candidates.add(definition.metadata_key.toLowerCase())}if(typeof definition.cli_flag==="string"&&definition.cli_flag.length>0){candidates.add(definition.cli_flag.replaceAll("-","_").toLowerCase());candidates.add(definition.cli_flag.toLowerCase())}if(Array.isArray(definition.cli_aliases)){for(const alias of definition.cli_aliases){if(typeof alias!=="string"||alias.length===0){continue}candidates.add(alias.replaceAll("-","_").toLowerCase());candidates.add(alias.toLowerCase())}}if(!candidates.has(normalizedToken)){continue}return{optionKey:definition.key,metadataKey:definition.metadata_key}}return void 0}export{COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR,COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR,COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR,COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON,parseCommandUnsetTargets,resolveRuntimeUnsetFieldDefinition};
|
|
295
2
|
//# sourceMappingURL=shared-unset-fields.js.map
|
|
296
|
-
//# debugId=0062e981-158a-5e6a-b028-6c7cef0f59ba
|