@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,482 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module sdk/project-runtime-compatibility
|
|
3
|
-
*
|
|
4
|
-
* Protects project mutations from an older PATH-resolved pm executable while
|
|
5
|
-
* leaving diagnosis reads available.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
!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]="f9737b75-b285-5fe9-a9ce-63e7c07626cb")}catch(e){}}();
|
|
9
|
-
import fs from "node:fs";
|
|
10
|
-
import path from "node:path";
|
|
11
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
12
|
-
import { PmCliError } from "../../core/shared/errors.js";
|
|
13
|
-
export { PmCliError };
|
|
14
|
-
const PACKAGE_NAME = "@unbrained/pm-cli";
|
|
15
|
-
const MUTATING_COMMANDS = new Set([
|
|
16
|
-
"append",
|
|
17
|
-
"claim",
|
|
18
|
-
"changelog",
|
|
19
|
-
"close",
|
|
20
|
-
"close-many",
|
|
21
|
-
"close-task",
|
|
22
|
-
"comments",
|
|
23
|
-
"config",
|
|
24
|
-
"copy",
|
|
25
|
-
"create",
|
|
26
|
-
"dedupe-merge",
|
|
27
|
-
"delete",
|
|
28
|
-
"deps",
|
|
29
|
-
"docs",
|
|
30
|
-
"extension",
|
|
31
|
-
"event",
|
|
32
|
-
"events",
|
|
33
|
-
"files",
|
|
34
|
-
"focus",
|
|
35
|
-
"gc",
|
|
36
|
-
"history-author-acknowledge",
|
|
37
|
-
"history-compact",
|
|
38
|
-
"history-redact",
|
|
39
|
-
"history-repair",
|
|
40
|
-
"init",
|
|
41
|
-
"install",
|
|
42
|
-
"item",
|
|
43
|
-
"learnings",
|
|
44
|
-
"meet",
|
|
45
|
-
"merge",
|
|
46
|
-
"normalize",
|
|
47
|
-
"notes",
|
|
48
|
-
"package",
|
|
49
|
-
"packages",
|
|
50
|
-
"pause-task",
|
|
51
|
-
"plan",
|
|
52
|
-
"profile",
|
|
53
|
-
"reindex",
|
|
54
|
-
"release",
|
|
55
|
-
"remind",
|
|
56
|
-
"restore",
|
|
57
|
-
"schema",
|
|
58
|
-
"start-task",
|
|
59
|
-
"test",
|
|
60
|
-
"test-all",
|
|
61
|
-
"test-runs",
|
|
62
|
-
"test-runs-worker",
|
|
63
|
-
"telemetry",
|
|
64
|
-
"templates",
|
|
65
|
-
"twin",
|
|
66
|
-
"update",
|
|
67
|
-
"update-many",
|
|
68
|
-
"upgrade",
|
|
69
|
-
"vcs",
|
|
70
|
-
"workspace",
|
|
71
|
-
]);
|
|
72
|
-
const GLOBAL_VALUE_FLAGS = new Set([
|
|
73
|
-
"--author",
|
|
74
|
-
"--output-budget",
|
|
75
|
-
"--output-format",
|
|
76
|
-
"--output-include",
|
|
77
|
-
"--output-limit",
|
|
78
|
-
"--output-session",
|
|
79
|
-
"--path",
|
|
80
|
-
"--pm-path",
|
|
81
|
-
]);
|
|
82
|
-
const VERSION_PATTERN = /\b(\d{4})\.(\d{1,2})\.(\d{1,2})(?:-(\d+))?\b/u;
|
|
83
|
-
/** First pm release whose history writer and reader support item-hash epoch 3. */
|
|
84
|
-
export const HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN = "2026.8.31";
|
|
85
|
-
/** Return whether an invocation includes one of the exact mutation switches. */
|
|
86
|
-
function hasAnyToken(argv, tokens) {
|
|
87
|
-
return argv.some((token) => tokens.includes(token.split("=", 1)[0]));
|
|
88
|
-
}
|
|
89
|
-
/** Classify package/extension compatibility aliases from subcommands and legacy flags. */
|
|
90
|
-
function isPackageMutation(argv, positionals) {
|
|
91
|
-
return ([
|
|
92
|
-
"activate",
|
|
93
|
-
"adopt",
|
|
94
|
-
"adopt-all",
|
|
95
|
-
"deactivate",
|
|
96
|
-
"init",
|
|
97
|
-
"install",
|
|
98
|
-
"migrate",
|
|
99
|
-
"reload",
|
|
100
|
-
"uninstall",
|
|
101
|
-
].includes(positionals[0] ?? "") ||
|
|
102
|
-
hasAnyToken(argv, [
|
|
103
|
-
"--activate",
|
|
104
|
-
"--adopt",
|
|
105
|
-
"--adopt-all",
|
|
106
|
-
"--deactivate",
|
|
107
|
-
"--fix-managed-state",
|
|
108
|
-
"--init",
|
|
109
|
-
"--install",
|
|
110
|
-
"--output",
|
|
111
|
-
"--reload",
|
|
112
|
-
"--scaffold",
|
|
113
|
-
"--uninstall",
|
|
114
|
-
]));
|
|
115
|
-
}
|
|
116
|
-
const MIXED_COMMAND_CLASSIFIERS = {
|
|
117
|
-
changelog: (argv, positionals) => {
|
|
118
|
-
if (positionals[0] === "generate")
|
|
119
|
-
return !hasAnyToken(argv, ["--check"]);
|
|
120
|
-
const exportIndex = argv.indexOf("export");
|
|
121
|
-
return (positionals[0] === "export" &&
|
|
122
|
-
(hasAnyToken(argv, ["--output"]) ||
|
|
123
|
-
(exportIndex >= 0 &&
|
|
124
|
-
argv[exportIndex + 1] !== undefined &&
|
|
125
|
-
!argv[exportIndex + 1].startsWith("-"))));
|
|
126
|
-
},
|
|
127
|
-
comments: (argv) => hasAnyToken(argv, ["--add", "--delete", "--edit", "--file", "--stdin"]),
|
|
128
|
-
config: (_argv, positionals) => (positionals[0] === "project" || positionals[0] === "global"
|
|
129
|
-
? positionals[1]
|
|
130
|
-
: positionals[0]) === "set",
|
|
131
|
-
deps: () => false,
|
|
132
|
-
docs: (argv) => hasAnyToken(argv, ["--add", "--add-glob", "--migrate", "--remove"]),
|
|
133
|
-
duplicates: () => false,
|
|
134
|
-
events: () => false,
|
|
135
|
-
extension: isPackageMutation,
|
|
136
|
-
files: (argv, positionals) => hasAnyToken(argv, ["--add", "--add-glob", "--migrate", "--remove"]) ||
|
|
137
|
-
(positionals[0] === "discover" && hasAnyToken(argv, ["--apply"])),
|
|
138
|
-
health: (argv) => !hasAnyToken(argv, ["--check-only", "--no-refresh", "--skip-vectors"]),
|
|
139
|
-
learnings: (argv) => hasAnyToken(argv, ["--add", "--delete", "--edit", "--file", "--stdin"]),
|
|
140
|
-
merge: (_argv, positionals) => positionals[0] !== "report",
|
|
141
|
-
notes: (argv) => hasAnyToken(argv, ["--add", "--delete", "--edit", "--file", "--stdin"]),
|
|
142
|
-
package: isPackageMutation,
|
|
143
|
-
packages: isPackageMutation,
|
|
144
|
-
profile: (_argv, positionals) => positionals[0] === "apply",
|
|
145
|
-
schema: (argv, positionals) => [
|
|
146
|
-
"add-field",
|
|
147
|
-
"add-status",
|
|
148
|
-
"add-type",
|
|
149
|
-
"remove-field",
|
|
150
|
-
"remove-status",
|
|
151
|
-
"remove-type",
|
|
152
|
-
"remap-status",
|
|
153
|
-
"rename-field",
|
|
154
|
-
"rename-type",
|
|
155
|
-
].includes(positionals[0] ?? "") &&
|
|
156
|
-
!(hasAnyToken(argv, ["--infer"]) && !hasAnyToken(argv, ["--apply"])),
|
|
157
|
-
telemetry: (_argv, positionals) => positionals.slice(0, 2).some((token) => ["clear", "flush"].includes(token)),
|
|
158
|
-
templates: (_argv, positionals) => positionals[0] === "save",
|
|
159
|
-
test: (argv) => hasAnyToken(argv, [
|
|
160
|
-
"--add",
|
|
161
|
-
"--add-json",
|
|
162
|
-
"--background",
|
|
163
|
-
"--measure",
|
|
164
|
-
"--remove",
|
|
165
|
-
"--resume",
|
|
166
|
-
"--run",
|
|
167
|
-
"--stop",
|
|
168
|
-
]),
|
|
169
|
-
validate: (argv) => hasAnyToken(argv, ["--auto-fix", "--prune-missing"]),
|
|
170
|
-
vcs: (_argv, positionals) => ["abandon", "create", "merge", "propose", "ref-create"].includes(positionals[0] ?? ""),
|
|
171
|
-
workspace: (_argv, positionals) => positionals[0] === "snapshot" &&
|
|
172
|
-
["create", "delete", "restore"].includes(positionals[1] ?? ""),
|
|
173
|
-
};
|
|
174
|
-
/** Parse the supported date-version coordinates used by pm releases. */
|
|
175
|
-
function parseDateVersion(value) {
|
|
176
|
-
const match = value.match(VERSION_PATTERN);
|
|
177
|
-
return match
|
|
178
|
-
? [
|
|
179
|
-
Number(match[1]),
|
|
180
|
-
Number(match[2]),
|
|
181
|
-
Number(match[3]),
|
|
182
|
-
Number(match[4] ?? 0),
|
|
183
|
-
]
|
|
184
|
-
: null;
|
|
185
|
-
}
|
|
186
|
-
/** Compare pm date versions without accepting arbitrary semver-like prose. */
|
|
187
|
-
export function comparePmDateVersions(left, right) {
|
|
188
|
-
const leftParts = parseDateVersion(left);
|
|
189
|
-
const rightParts = parseDateVersion(right);
|
|
190
|
-
if (!leftParts || !rightParts)
|
|
191
|
-
return null;
|
|
192
|
-
for (let index = 0; index < leftParts.length; index += 1) {
|
|
193
|
-
const delta = leftParts[index] - rightParts[index];
|
|
194
|
-
if (delta !== 0)
|
|
195
|
-
return Math.sign(delta);
|
|
196
|
-
}
|
|
197
|
-
return 0;
|
|
198
|
-
}
|
|
199
|
-
/** Resolve the item-hash epoch written by a known pm runtime release. */
|
|
200
|
-
export function historyItemHashVersionForRuntime(version) {
|
|
201
|
-
return comparePmDateVersions(version, HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN) !== -1
|
|
202
|
-
? 3
|
|
203
|
-
: 2;
|
|
204
|
-
}
|
|
205
|
-
/** Find the oldest declaration that cannot select a reader for the executing writer epoch. */
|
|
206
|
-
function findIncompatibleHistoryEpochPin(pins, writerItemHashVersion) {
|
|
207
|
-
if (writerItemHashVersion !== 3)
|
|
208
|
-
return undefined;
|
|
209
|
-
return pins
|
|
210
|
-
.filter((pin) => pin.history_epoch_compatible === false)
|
|
211
|
-
.map((pin) => ({ ...pin, declaration: pin.declaration ?? pin.version }))
|
|
212
|
-
.sort((left, right) => comparePmDateVersions(left.version, right.version))[0];
|
|
213
|
-
}
|
|
214
|
-
/** Read one optional JSON object without turning absence or corruption into startup failure. */
|
|
215
|
-
function readJsonRecord(filePath) {
|
|
216
|
-
try {
|
|
217
|
-
const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
218
|
-
return typeof parsed === "object" &&
|
|
219
|
-
parsed !== null &&
|
|
220
|
-
!Array.isArray(parsed)
|
|
221
|
-
? parsed
|
|
222
|
-
: null;
|
|
223
|
-
}
|
|
224
|
-
catch {
|
|
225
|
-
return null;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
/** Extract explicit comparator and hyphen upper bounds from one range branch. */
|
|
229
|
-
function rangeUpperBounds(alternative) {
|
|
230
|
-
const comparators = [
|
|
231
|
-
...alternative.matchAll(/(<=|<)\s*v?(\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?)/gu),
|
|
232
|
-
].map((match) => ({ inclusive: match[1] === "<=", version: match[2] }));
|
|
233
|
-
const hyphen = alternative.match(/\b\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?\s+-\s+v?(\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?)/u);
|
|
234
|
-
return hyphen
|
|
235
|
-
? [...comparators, { inclusive: true, version: hyphen[1] }]
|
|
236
|
-
: comparators;
|
|
237
|
-
}
|
|
238
|
-
/** Classify whether a range is bounded and can select an epoch-3 reader. */
|
|
239
|
-
function analyzeHistoryEpochRange(specification) {
|
|
240
|
-
const alternativeBounds = specification
|
|
241
|
-
.split("||")
|
|
242
|
-
.map((alternative) => rangeUpperBounds(alternative));
|
|
243
|
-
return {
|
|
244
|
-
bounded: alternativeBounds.some((bounds) => bounds.length > 0),
|
|
245
|
-
compatible: alternativeBounds.some((bounds) => bounds.every((bound) => {
|
|
246
|
-
const comparison = comparePmDateVersions(HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN, bound.version);
|
|
247
|
-
return (comparison !== null &&
|
|
248
|
-
(bound.inclusive ? comparison !== 1 : comparison === -1));
|
|
249
|
-
})),
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
/** Extract every supported pm declaration without letting one section hide another. */
|
|
253
|
-
function dependencyPins(packageJson) {
|
|
254
|
-
return [
|
|
255
|
-
"dependencies",
|
|
256
|
-
"devDependencies",
|
|
257
|
-
"optionalDependencies",
|
|
258
|
-
"peerDependencies",
|
|
259
|
-
].flatMap((field) => {
|
|
260
|
-
const dependencies = packageJson[field];
|
|
261
|
-
if (typeof dependencies !== "object" || dependencies === null)
|
|
262
|
-
return [];
|
|
263
|
-
const value = dependencies[PACKAGE_NAME];
|
|
264
|
-
const specification = typeof value === "string" ? value.trim() : "";
|
|
265
|
-
const version = /^[<!]/u.test(specification)
|
|
266
|
-
? undefined
|
|
267
|
-
: specification.match(VERSION_PATTERN)?.[0];
|
|
268
|
-
if (!version)
|
|
269
|
-
return [];
|
|
270
|
-
const exact = /^(?:=|v)?\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?$/u.test(specification);
|
|
271
|
-
const range = analyzeHistoryEpochRange(specification);
|
|
272
|
-
return [
|
|
273
|
-
{
|
|
274
|
-
version,
|
|
275
|
-
constraint: exact ? "exact" : range.bounded ? "range" : "minimum",
|
|
276
|
-
...(exact ? {} : { declaration: specification }),
|
|
277
|
-
history_epoch_compatible: exact
|
|
278
|
-
? comparePmDateVersions(version, HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN) !== -1
|
|
279
|
-
: range.compatible,
|
|
280
|
-
},
|
|
281
|
-
];
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
/** Read npm's exact installed package coordinate from package-lock.json. */
|
|
285
|
-
function packageLockPin(projectRoot) {
|
|
286
|
-
const lock = readJsonRecord(path.join(projectRoot, "package-lock.json"));
|
|
287
|
-
const packages = lock?.packages;
|
|
288
|
-
if (typeof packages !== "object" || packages === null)
|
|
289
|
-
return undefined;
|
|
290
|
-
const installed = packages["node_modules/@unbrained/pm-cli"];
|
|
291
|
-
if (typeof installed !== "object" || installed === null)
|
|
292
|
-
return undefined;
|
|
293
|
-
const version = installed.version;
|
|
294
|
-
return typeof version === "string" ? version : undefined;
|
|
295
|
-
}
|
|
296
|
-
/** Read the exact coordinate from the matching text lockfile package block. */
|
|
297
|
-
function textLockPin(projectRoot, file) {
|
|
298
|
-
try {
|
|
299
|
-
const lines = fs
|
|
300
|
-
.readFileSync(path.join(projectRoot, file), "utf8")
|
|
301
|
-
.split(/\r?\n/u);
|
|
302
|
-
const packageLineIndex = lines.findIndex((line) => line.includes(PACKAGE_NAME));
|
|
303
|
-
if (packageLineIndex < 0)
|
|
304
|
-
return undefined;
|
|
305
|
-
const packageIndent = lines[packageLineIndex].match(/^\s*/u)[0].length;
|
|
306
|
-
const entry = [lines[packageLineIndex]];
|
|
307
|
-
for (let index = packageLineIndex + 1; index < lines.length; index += 1) {
|
|
308
|
-
const line = lines[index];
|
|
309
|
-
const trimmed = line.trim();
|
|
310
|
-
const indent = line.match(/^\s*/u)[0].length;
|
|
311
|
-
if (trimmed.length > 0 && indent <= packageIndent)
|
|
312
|
-
break;
|
|
313
|
-
entry.push(line);
|
|
314
|
-
}
|
|
315
|
-
const entrySource = entry.join("\n");
|
|
316
|
-
const explicitVersion = entrySource.match(/^\s*version(?::\s*|\s+)["']?(\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?)/mu)?.[1];
|
|
317
|
-
return explicitVersion ?? entry[0].match(VERSION_PATTERN)?.[0];
|
|
318
|
-
}
|
|
319
|
-
catch {
|
|
320
|
-
return undefined;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
/** Discover declared, installed, and lock-resolved versions without network I/O. */
|
|
324
|
-
export function discoverProjectRuntimeVersionPins(projectRoot) {
|
|
325
|
-
const pins = [];
|
|
326
|
-
const projectPackage = readJsonRecord(path.join(projectRoot, "package.json"));
|
|
327
|
-
if (projectPackage) {
|
|
328
|
-
pins.push(...dependencyPins(projectPackage).map((pin) => ({
|
|
329
|
-
...pin,
|
|
330
|
-
source: "package.json",
|
|
331
|
-
})));
|
|
332
|
-
}
|
|
333
|
-
const installedPackage = readJsonRecord(path.join(projectRoot, "node_modules", "@unbrained", "pm-cli", "package.json"));
|
|
334
|
-
const installedVersion = installedPackage?.version;
|
|
335
|
-
if (typeof installedVersion === "string" &&
|
|
336
|
-
parseDateVersion(installedVersion)) {
|
|
337
|
-
pins.push({
|
|
338
|
-
version: installedVersion,
|
|
339
|
-
source: "installed-package",
|
|
340
|
-
constraint: "exact",
|
|
341
|
-
history_epoch_compatible: historyItemHashVersionForRuntime(installedVersion) === 3,
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
const packageLockVersion = packageLockPin(projectRoot);
|
|
345
|
-
if (packageLockVersion && parseDateVersion(packageLockVersion)) {
|
|
346
|
-
pins.push({
|
|
347
|
-
version: packageLockVersion,
|
|
348
|
-
source: "package-lock.json",
|
|
349
|
-
constraint: "exact",
|
|
350
|
-
history_epoch_compatible: historyItemHashVersionForRuntime(packageLockVersion) === 3,
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
for (const file of ["pnpm-lock.yaml", "yarn.lock"]) {
|
|
354
|
-
const version = textLockPin(projectRoot, file);
|
|
355
|
-
if (version) {
|
|
356
|
-
pins.push({
|
|
357
|
-
version,
|
|
358
|
-
source: file,
|
|
359
|
-
constraint: "exact",
|
|
360
|
-
history_epoch_compatible: historyItemHashVersionForRuntime(version) === 3,
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
return pins;
|
|
365
|
-
}
|
|
366
|
-
/** Resolve the first command token and index while preserving global option values. */
|
|
367
|
-
function commandTokenFromArgv(argv) {
|
|
368
|
-
for (let index = 0; index < argv.length; index += 1) {
|
|
369
|
-
const token = argv[index];
|
|
370
|
-
if (GLOBAL_VALUE_FLAGS.has(token)) {
|
|
371
|
-
index += 1;
|
|
372
|
-
continue;
|
|
373
|
-
}
|
|
374
|
-
if (!token.startsWith("-"))
|
|
375
|
-
return { command: token.toLowerCase(), index };
|
|
376
|
-
}
|
|
377
|
-
return undefined;
|
|
378
|
-
}
|
|
379
|
-
/** Classify mutation-capable invocations while preserving explicit read modes. */
|
|
380
|
-
export function isProjectMutatingInvocation(argv) {
|
|
381
|
-
const commandToken = commandTokenFromArgv(argv);
|
|
382
|
-
if (!commandToken)
|
|
383
|
-
return false;
|
|
384
|
-
if (hasAnyToken(argv, ["--help", "-h", "--dry-run"]))
|
|
385
|
-
return false;
|
|
386
|
-
const { command, index: commandIndex } = commandToken;
|
|
387
|
-
const positionals = [];
|
|
388
|
-
for (let index = commandIndex + 1; index < argv.length; index += 1) {
|
|
389
|
-
const token = argv[index];
|
|
390
|
-
if (GLOBAL_VALUE_FLAGS.has(token)) {
|
|
391
|
-
index += 1;
|
|
392
|
-
continue;
|
|
393
|
-
}
|
|
394
|
-
if (!token.startsWith("-"))
|
|
395
|
-
positionals.push(token.toLowerCase());
|
|
396
|
-
}
|
|
397
|
-
const mixedClassifier = MIXED_COMMAND_CLASSIFIERS[command];
|
|
398
|
-
return mixedClassifier
|
|
399
|
-
? mixedClassifier(argv, positionals)
|
|
400
|
-
: MUTATING_COMMANDS.has(command);
|
|
401
|
-
}
|
|
402
|
-
/** Inspect whether one invocation is compatible with the project's newest pin. */
|
|
403
|
-
export function inspectProjectRuntimeCompatibility(options) {
|
|
404
|
-
const command = commandTokenFromArgv(options.argv)?.command;
|
|
405
|
-
const mutating = isProjectMutatingInvocation(options.argv);
|
|
406
|
-
const pins = discoverProjectRuntimeVersionPins(options.projectRoot)
|
|
407
|
-
.filter((pin) => comparePmDateVersions(pin.version, options.executingVersion) !== null)
|
|
408
|
-
.sort((left, right) => comparePmDateVersions(right.version, left.version));
|
|
409
|
-
const newest = pins[0];
|
|
410
|
-
const stale = newest !== undefined &&
|
|
411
|
-
comparePmDateVersions(options.executingVersion, newest.version) === -1;
|
|
412
|
-
const writerItemHashVersion = historyItemHashVersionForRuntime(options.executingVersion);
|
|
413
|
-
const incompatibleEpochPin = findIncompatibleHistoryEpochPin(pins, writerItemHashVersion);
|
|
414
|
-
const historyEpochIncompatible = mutating && incompatibleEpochPin !== undefined;
|
|
415
|
-
const warning = stale && !mutating
|
|
416
|
-
? {
|
|
417
|
-
code: "project_runtime_stale_read",
|
|
418
|
-
executing_version: options.executingVersion,
|
|
419
|
-
project_version: newest.version,
|
|
420
|
-
source: newest.source,
|
|
421
|
-
message: "This read is using an older pm runtime than the project requires.",
|
|
422
|
-
next_steps: [
|
|
423
|
-
`Run the command through the project's installed ${PACKAGE_NAME} ${newest.version}.`,
|
|
424
|
-
"Install the project dependencies with its declared package manager if the local executable is missing.",
|
|
425
|
-
],
|
|
426
|
-
}
|
|
427
|
-
: undefined;
|
|
428
|
-
return {
|
|
429
|
-
compatible: !mutating ||
|
|
430
|
-
(!stale && !historyEpochIncompatible) ||
|
|
431
|
-
options.allowStale === true,
|
|
432
|
-
executing_version: options.executingVersion,
|
|
433
|
-
...(newest
|
|
434
|
-
? { project_version: newest.version, source: newest.source }
|
|
435
|
-
: {}),
|
|
436
|
-
...(command ? { command } : {}),
|
|
437
|
-
mutating,
|
|
438
|
-
stale,
|
|
439
|
-
history_epoch_incompatible: historyEpochIncompatible,
|
|
440
|
-
writer_item_hash_version: writerItemHashVersion,
|
|
441
|
-
...(incompatibleEpochPin
|
|
442
|
-
? {
|
|
443
|
-
incompatible_project_version: incompatibleEpochPin.declaration,
|
|
444
|
-
incompatible_source: incompatibleEpochPin.source,
|
|
445
|
-
}
|
|
446
|
-
: {}),
|
|
447
|
-
...(warning ? { warning } : {}),
|
|
448
|
-
override_applied: mutating &&
|
|
449
|
-
(stale || historyEpochIncompatible) &&
|
|
450
|
-
options.allowStale === true,
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
/** Refuse stale mutations with a stable SDK error and package-neutral recovery. */
|
|
454
|
-
export function assertProjectRuntimeCompatibility(options) {
|
|
455
|
-
const result = inspectProjectRuntimeCompatibility(options);
|
|
456
|
-
if (result.compatible)
|
|
457
|
-
return result;
|
|
458
|
-
if (result.history_epoch_incompatible) {
|
|
459
|
-
throw new PmCliError(`pm ${result.executing_version} cannot write item-hash epoch ${result.writer_item_hash_version} into a project pinned to pm ${result.incompatible_project_version}.`, EXIT_CODE.CONFLICT, {
|
|
460
|
-
code: "project_runtime_history_epoch_incompatible",
|
|
461
|
-
reason: result.incompatible_source,
|
|
462
|
-
why: `The pinned runtime cannot read item_hash_version ${result.writer_item_hash_version}; allowing the write would break its health and validation gates.`,
|
|
463
|
-
nextSteps: [
|
|
464
|
-
`Upgrade the project's ${PACKAGE_NAME} pin to ${HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN} or newer before mutating tracker history.`,
|
|
465
|
-
"For an intentional coordinated migration only, set PM_ALLOW_STALE_CLI=1 for this invocation and record why.",
|
|
466
|
-
"Read-only commands remain available without an override.",
|
|
467
|
-
],
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
throw new PmCliError(`pm ${result.executing_version} cannot mutate a project pinned to newer pm ${result.project_version}.`, EXIT_CODE.CONFLICT, {
|
|
471
|
-
code: "project_runtime_stale_mutation",
|
|
472
|
-
reason: result.source,
|
|
473
|
-
why: "An older runtime can write storage, history, and merge contracts it does not understand.",
|
|
474
|
-
nextSteps: [
|
|
475
|
-
`Run this command through the project's installed ${PACKAGE_NAME} ${result.project_version}.`,
|
|
476
|
-
"For an intentional recovery only, set PM_ALLOW_STALE_CLI=1 for this invocation and record why.",
|
|
477
|
-
"Read-only commands remain available without an override.",
|
|
478
|
-
],
|
|
479
|
-
});
|
|
480
|
-
}
|
|
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]="7ab9180f-dfcb-579d-bc0c-dbba2e4ad77e")}catch(e2){}})();import fs from"node:fs";import path from"node:path";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";const PACKAGE_NAME="@unbrained/pm-cli";const MUTATING_COMMANDS=new Set(["append","claim","changelog","close","close-many","close-task","comments","config","copy","create","dedupe-merge","delete","deps","docs","extension","event","events","files","focus","gc","history-author-acknowledge","history-compact","history-redact","history-repair","init","install","item","learnings","meet","merge","normalize","notes","package","packages","pause-task","plan","profile","reindex","release","remind","restore","schema","start-task","test","test-all","test-runs","test-runs-worker","telemetry","templates","twin","update","update-many","upgrade","vcs","workspace"]);const GLOBAL_VALUE_FLAGS=new Set(["--author","--output-budget","--output-format","--output-include","--output-limit","--output-session","--path","--pm-path"]);const VERSION_PATTERN=/\b(\d{4})\.(\d{1,2})\.(\d{1,2})(?:-(\d+))?\b/u;const HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN="2026.8.31";function hasAnyToken(argv,tokens){return argv.some(token=>tokens.includes(token.split("=",1)[0]))}function isPackageMutation(argv,positionals){return["activate","adopt","adopt-all","deactivate","init","install","migrate","reload","uninstall"].includes(positionals[0]??"")||hasAnyToken(argv,["--activate","--adopt","--adopt-all","--deactivate","--fix-managed-state","--init","--install","--output","--reload","--scaffold","--uninstall"])}const MIXED_COMMAND_CLASSIFIERS={changelog:(argv,positionals)=>{if(positionals[0]==="generate")return!hasAnyToken(argv,["--check"]);const exportIndex=argv.indexOf("export");return positionals[0]==="export"&&(hasAnyToken(argv,["--output"])||exportIndex>=0&&argv[exportIndex+1]!==void 0&&!argv[exportIndex+1].startsWith("-"))},comments:argv=>hasAnyToken(argv,["--add","--delete","--edit","--file","--stdin"]),config:(_argv,positionals)=>(positionals[0]==="project"||positionals[0]==="global"?positionals[1]:positionals[0])==="set",deps:()=>false,docs:argv=>hasAnyToken(argv,["--add","--add-glob","--migrate","--remove"]),duplicates:()=>false,events:()=>false,extension:isPackageMutation,files:(argv,positionals)=>hasAnyToken(argv,["--add","--add-glob","--migrate","--remove"])||positionals[0]==="discover"&&hasAnyToken(argv,["--apply"]),health:argv=>!hasAnyToken(argv,["--check-only","--no-refresh","--skip-vectors"]),learnings:argv=>hasAnyToken(argv,["--add","--delete","--edit","--file","--stdin"]),merge:(_argv,positionals)=>positionals[0]!=="report",notes:argv=>hasAnyToken(argv,["--add","--delete","--edit","--file","--stdin"]),package:isPackageMutation,packages:isPackageMutation,profile:(_argv,positionals)=>positionals[0]==="apply",schema:(argv,positionals)=>["add-field","add-status","add-type","remove-field","remove-status","remove-type","remap-status","rename-field","rename-type"].includes(positionals[0]??"")&&!(hasAnyToken(argv,["--infer"])&&!hasAnyToken(argv,["--apply"])),telemetry:(_argv,positionals)=>positionals.slice(0,2).some(token=>["clear","flush"].includes(token)),templates:(_argv,positionals)=>positionals[0]==="save",test:argv=>hasAnyToken(argv,["--add","--add-json","--background","--measure","--remove","--resume","--run","--stop"]),validate:argv=>hasAnyToken(argv,["--auto-fix","--prune-missing"]),vcs:(_argv,positionals)=>["abandon","create","merge","propose","ref-create"].includes(positionals[0]??""),workspace:(_argv,positionals)=>positionals[0]==="snapshot"&&["create","delete","restore"].includes(positionals[1]??"")};function parseDateVersion(value){const match=value.match(VERSION_PATTERN);return match?[Number(match[1]),Number(match[2]),Number(match[3]),Number(match[4]??0)]:null}function comparePmDateVersions(left,right){const leftParts=parseDateVersion(left);const rightParts=parseDateVersion(right);if(!leftParts||!rightParts)return null;for(let index=0;index<leftParts.length;index+=1){const delta=leftParts[index]-rightParts[index];if(delta!==0)return Math.sign(delta)}return 0}function historyItemHashVersionForRuntime(version){return comparePmDateVersions(version,HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN)!==-1?3:2}function findIncompatibleHistoryEpochPin(pins,writerItemHashVersion){if(writerItemHashVersion!==3)return void 0;return pins.filter(pin=>pin.history_epoch_compatible===false).map(pin=>({...pin,declaration:pin.declaration??pin.version})).sort((left,right)=>comparePmDateVersions(left.version,right.version))[0]}function readJsonRecord(filePath){try{const parsed=JSON.parse(fs.readFileSync(filePath,"utf8"));return typeof parsed==="object"&&parsed!==null&&!Array.isArray(parsed)?parsed:null}catch{return null}}function rangeUpperBounds(alternative){const comparators=[...alternative.matchAll(/(<=|<)\s*v?(\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?)/gu)].map(match=>({inclusive:match[1]==="<=",version:match[2]}));const hyphen=alternative.match(/\b\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?\s+-\s+v?(\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?)/u);return hyphen?[...comparators,{inclusive:true,version:hyphen[1]}]:comparators}function analyzeHistoryEpochRange(specification){const alternativeBounds=specification.split("||").map(alternative=>rangeUpperBounds(alternative));return{bounded:alternativeBounds.some(bounds=>bounds.length>0),compatible:alternativeBounds.some(bounds=>bounds.every(bound=>{const comparison=comparePmDateVersions(HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN,bound.version);return comparison!==null&&(bound.inclusive?comparison!==1:comparison===-1)}))}}function dependencyPins(packageJson){return["dependencies","devDependencies","optionalDependencies","peerDependencies"].flatMap(field=>{const dependencies=packageJson[field];if(typeof dependencies!=="object"||dependencies===null)return[];const value=dependencies[PACKAGE_NAME];const specification=typeof value==="string"?value.trim():"";const version=/^[<!]/u.test(specification)?void 0:specification.match(VERSION_PATTERN)?.[0];if(!version)return[];const exact=/^(?:=|v)?\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?$/u.test(specification);const range=analyzeHistoryEpochRange(specification);return[{version,constraint:exact?"exact":range.bounded?"range":"minimum",...exact?{}:{declaration:specification},history_epoch_compatible:exact?comparePmDateVersions(version,HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN)!==-1:range.compatible}]})}function packageLockPin(projectRoot){const lock=readJsonRecord(path.join(projectRoot,"package-lock.json"));const packages=lock?.packages;if(typeof packages!=="object"||packages===null)return void 0;const installed=packages["node_modules/@unbrained/pm-cli"];if(typeof installed!=="object"||installed===null)return void 0;const version=installed.version;return typeof version==="string"?version:void 0}function textLockPin(projectRoot,file){try{const lines=fs.readFileSync(path.join(projectRoot,file),"utf8").split(/\r?\n/u);const packageLineIndex=lines.findIndex(line=>line.includes(PACKAGE_NAME));if(packageLineIndex<0)return void 0;const packageIndent=lines[packageLineIndex].match(/^\s*/u)[0].length;const entry=[lines[packageLineIndex]];for(let index=packageLineIndex+1;index<lines.length;index+=1){const line=lines[index];const trimmed=line.trim();const indent=line.match(/^\s*/u)[0].length;if(trimmed.length>0&&indent<=packageIndent)break;entry.push(line)}const entrySource=entry.join("\n");const explicitVersion=entrySource.match(/^\s*version(?::\s*|\s+)["']?(\d{4}\.\d{1,2}\.\d{1,2}(?:-\d+)?)/mu)?.[1];return explicitVersion??entry[0].match(VERSION_PATTERN)?.[0]}catch{return void 0}}function discoverProjectRuntimeVersionPins(projectRoot){const pins=[];const projectPackage=readJsonRecord(path.join(projectRoot,"package.json"));if(projectPackage){pins.push(...dependencyPins(projectPackage).map(pin=>({...pin,source:"package.json"})))}const installedPackage=readJsonRecord(path.join(projectRoot,"node_modules","@unbrained","pm-cli","package.json"));const installedVersion=installedPackage?.version;if(typeof installedVersion==="string"&&parseDateVersion(installedVersion)){pins.push({version:installedVersion,source:"installed-package",constraint:"exact",history_epoch_compatible:historyItemHashVersionForRuntime(installedVersion)===3})}const packageLockVersion=packageLockPin(projectRoot);if(packageLockVersion&&parseDateVersion(packageLockVersion)){pins.push({version:packageLockVersion,source:"package-lock.json",constraint:"exact",history_epoch_compatible:historyItemHashVersionForRuntime(packageLockVersion)===3})}for(const file of["pnpm-lock.yaml","yarn.lock"]){const version=textLockPin(projectRoot,file);if(version){pins.push({version,source:file,constraint:"exact",history_epoch_compatible:historyItemHashVersionForRuntime(version)===3})}}return pins}function commandTokenFromArgv(argv){for(let index=0;index<argv.length;index+=1){const token=argv[index];if(GLOBAL_VALUE_FLAGS.has(token)){index+=1;continue}if(!token.startsWith("-"))return{command:token.toLowerCase(),index}}return void 0}function isProjectMutatingInvocation(argv){const commandToken=commandTokenFromArgv(argv);if(!commandToken)return false;if(hasAnyToken(argv,["--help","-h","--dry-run"]))return false;const{command,index:commandIndex}=commandToken;const positionals=[];for(let index=commandIndex+1;index<argv.length;index+=1){const token=argv[index];if(GLOBAL_VALUE_FLAGS.has(token)){index+=1;continue}if(!token.startsWith("-"))positionals.push(token.toLowerCase())}const mixedClassifier=MIXED_COMMAND_CLASSIFIERS[command];return mixedClassifier?mixedClassifier(argv,positionals):MUTATING_COMMANDS.has(command)}function inspectProjectRuntimeCompatibility(options){const command=commandTokenFromArgv(options.argv)?.command;const mutating=isProjectMutatingInvocation(options.argv);const pins=discoverProjectRuntimeVersionPins(options.projectRoot).filter(pin=>comparePmDateVersions(pin.version,options.executingVersion)!==null).sort((left,right)=>comparePmDateVersions(right.version,left.version));const newest=pins[0];const stale=newest!==void 0&&comparePmDateVersions(options.executingVersion,newest.version)===-1;const writerItemHashVersion=historyItemHashVersionForRuntime(options.executingVersion);const incompatibleEpochPin=findIncompatibleHistoryEpochPin(pins,writerItemHashVersion);const historyEpochIncompatible=mutating&&incompatibleEpochPin!==void 0;const warning=stale&&!mutating?{code:"project_runtime_stale_read",executing_version:options.executingVersion,project_version:newest.version,source:newest.source,message:"This read is using an older pm runtime than the project requires.",next_steps:[`Run the command through the project's installed ${PACKAGE_NAME} ${newest.version}.`,"Install the project dependencies with its declared package manager if the local executable is missing."]}:void 0;return{compatible:!mutating||!stale&&!historyEpochIncompatible||options.allowStale===true,executing_version:options.executingVersion,...newest?{project_version:newest.version,source:newest.source}:{},...command?{command}:{},mutating,stale,history_epoch_incompatible:historyEpochIncompatible,writer_item_hash_version:writerItemHashVersion,...incompatibleEpochPin?{incompatible_project_version:incompatibleEpochPin.declaration,incompatible_source:incompatibleEpochPin.source}:{},...warning?{warning}:{},override_applied:mutating&&(stale||historyEpochIncompatible)&&options.allowStale===true}}function assertProjectRuntimeCompatibility(options){const result=inspectProjectRuntimeCompatibility(options);if(result.compatible)return result;if(result.history_epoch_incompatible){throw new PmCliError(`pm ${result.executing_version} cannot write item-hash epoch ${result.writer_item_hash_version} into a project pinned to pm ${result.incompatible_project_version}.`,EXIT_CODE.CONFLICT,{code:"project_runtime_history_epoch_incompatible",reason:result.incompatible_source,why:`The pinned runtime cannot read item_hash_version ${result.writer_item_hash_version}; allowing the write would break its health and validation gates.`,nextSteps:[`Upgrade the project's ${PACKAGE_NAME} pin to ${HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN} or newer before mutating tracker history.`,"For an intentional coordinated migration only, set PM_ALLOW_STALE_CLI=1 for this invocation and record why.","Read-only commands remain available without an override."]})}throw new PmCliError(`pm ${result.executing_version} cannot mutate a project pinned to newer pm ${result.project_version}.`,EXIT_CODE.CONFLICT,{code:"project_runtime_stale_mutation",reason:result.source,why:"An older runtime can write storage, history, and merge contracts it does not understand.",nextSteps:[`Run this command through the project's installed ${PACKAGE_NAME} ${result.project_version}.`,"For an intentional recovery only, set PM_ALLOW_STALE_CLI=1 for this invocation and record why.","Read-only commands remain available without an override."]})}export{HISTORY_ITEM_HASH_VERSION_3_INTRODUCED_IN,PmCliError,assertProjectRuntimeCompatibility,comparePmDateVersions,discoverProjectRuntimeVersionPins,historyItemHashVersionForRuntime,inspectProjectRuntimeCompatibility,isProjectMutatingInvocation};
|
|
481
2
|
//# sourceMappingURL=project-runtime-compatibility.js.map
|
|
482
|
-
//# debugId=f9737b75-b285-5fe9-a9ce-63e7c07626cb
|
|
@@ -1,29 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/environment/source-context
|
|
3
|
-
*
|
|
4
|
-
* Defines the inherited source-workspace access contract used by sandboxed
|
|
5
|
-
* commands that retain read-only project identity.
|
|
6
|
-
*/
|
|
7
|
-
/** Environment key declaring how a child may use inherited source coordinates. */
|
|
8
|
-
|
|
9
|
-
!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]="f97516b2-f75c-5ce0-82dc-f850466284c7")}catch(e){}}();
|
|
10
|
-
export const SOURCE_CONTEXT_ACCESS_ENV = "PM_SOURCE_CONTEXT_ACCESS";
|
|
11
|
-
/** Environment key permitting one explicit source-context write invocation. */
|
|
12
|
-
export const SOURCE_CONTEXT_WRITE_OVERRIDE_ENV = "PM_ALLOW_SOURCE_CONTEXT_WRITES";
|
|
13
|
-
/** Resolve inherited source-coordinate write policy without reading filesystem state. */
|
|
14
|
-
export function resolveSourceContextWritePolicy(environment) {
|
|
15
|
-
const declaredAccess = environment[SOURCE_CONTEXT_ACCESS_ENV];
|
|
16
|
-
const access = declaredAccess === undefined ||
|
|
17
|
-
declaredAccess.trim().toLowerCase() === "write"
|
|
18
|
-
? "write"
|
|
19
|
-
: "read_only";
|
|
20
|
-
const writeOverrideApplied = access === "read_only" &&
|
|
21
|
-
environment[SOURCE_CONTEXT_WRITE_OVERRIDE_ENV]?.trim() === "1";
|
|
22
|
-
return {
|
|
23
|
-
access,
|
|
24
|
-
write_override_applied: writeOverrideApplied,
|
|
25
|
-
source_writes_allowed: access === "write" || writeOverrideApplied,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
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]="8d1a6b35-70e8-5a61-8ce6-3bea9ed8170b")}catch(e2){}})();const SOURCE_CONTEXT_ACCESS_ENV="PM_SOURCE_CONTEXT_ACCESS";const SOURCE_CONTEXT_WRITE_OVERRIDE_ENV="PM_ALLOW_SOURCE_CONTEXT_WRITES";function resolveSourceContextWritePolicy(environment){const declaredAccess=environment[SOURCE_CONTEXT_ACCESS_ENV];const access=declaredAccess===void 0||declaredAccess.trim().toLowerCase()==="write"?"write":"read_only";const writeOverrideApplied=access==="read_only"&&environment[SOURCE_CONTEXT_WRITE_OVERRIDE_ENV]?.trim()==="1";return{access,write_override_applied:writeOverrideApplied,source_writes_allowed:access==="write"||writeOverrideApplied}}export{SOURCE_CONTEXT_ACCESS_ENV,SOURCE_CONTEXT_WRITE_OVERRIDE_ENV,resolveSourceContextWritePolicy};
|
|
28
2
|
//# sourceMappingURL=source-context.js.map
|
|
29
|
-
//# debugId=f97516b2-f75c-5ce0-82dc-f850466284c7
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/environment/tracker-preflight
|
|
3
|
-
*
|
|
4
|
-
* Exposes tracker initialization and filesystem preflight primitives to SDK consumers.
|
|
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]="745b9c3b-538c-558f-b018-b406ca4318f0")}catch(e){}}();
|
|
8
|
-
export { assertInitializedTracker, assertReadableTrackerRoot, buildTrackerInitializationRecovery, } from "../../core/store/tracker-preflight.js";
|
|
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]="5c8194ff-d877-51b8-bd54-d206f85a979c")}catch(e2){}})();import{assertInitializedTracker,assertReadableTrackerRoot,buildTrackerInitializationRecovery}from"../../core/store/tracker-preflight.js";export{assertInitializedTracker,assertReadableTrackerRoot,buildTrackerInitializationRecovery};
|
|
9
2
|
//# sourceMappingURL=tracker-preflight.js.map
|
|
10
|
-
//# debugId=745b9c3b-538c-558f-b018-b406ca4318f0
|